lam*_*cro 135 perl command-line
我正在研究Perl脚本.如何将命令行参数传递给它?
例:
script.pl "string1" "string2"
Run Code Online (Sandbox Code Playgroud)
use*_*511 188
取决于你想做什么.如果要将这两个参数用作输入文件,则可以将它们传入然后用于<>读取其内容.
如果它们具有不同的含义,您可以轻松使用GetOpt::Std和GetOpt::Long处理它们.GetOpt::Std仅支持单字符开关,并且GetOpt::Long更加灵活.来自GetOpt::Long:
use Getopt::Long;
my $data = "file.dat";
my $length = 24;
my $verbose;
$result = GetOptions ("length=i" => \$length, # numeric
"file=s" => \$data, # string
"verbose" => \$verbose); # flag
Run Code Online (Sandbox Code Playgroud)
或者,@ARGV是一个包含所有命令行参数的特殊变量.$ARGV[0]是第一个(即"string1"在你的情况下),$ARGV[1]是第二个参数.您不需要特殊模块即可访问@ARGV.
Geo*_*ker 60
你就像你想的那样传递它们,并且在你的脚本中,你从数组中获取它们@ARGV.像这样:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
Run Code Online (Sandbox Code Playgroud)
从这里开始.
小智 29
foreach my $arg (@ARGV) {
print $arg, "\n";
}
Run Code Online (Sandbox Code Playgroud)
将打印每个参数.
小智 24
或者,更性感的方式......
my ($src, $dest) = @ARGV;
"假设"传递了两个值.额外的代码可以验证假设是否安全.
Joa*_*sta 21
另一个选择是使用perl -s,例如:
#!/usr/bin/perl -s
print "value of -x: $x\n";
print "value of -name: $name\n";
Run Code Online (Sandbox Code Playgroud)
然后像这样称呼它:
% ./myprog -x -name=Jeff
value of -x: 1
value of -name: Jeff
Run Code Online (Sandbox Code Playgroud)
或者查看原始文章了解更多详情:
pkm*_*pkm 13
您可以通过将特殊变量分配给变量@ARGV列表来直接访问它们.所以,例如:
( $st, $prod, $ar, $file, $chart, $e, $max, $flag ,$id) = @ARGV;
Run Code Online (Sandbox Code Playgroud)
perl tmp.pl 1 2 3 4 5
如果参数是要读取的文件名,请使用菱形(<>)运算符来获取其内容:
while (my $line = <>) {
process_line($line);
}
Run Code Online (Sandbox Code Playgroud)
如果参数是选项/开关,请使用GetOpt :: Std或GetOpt :: Long,如slavy13.myopenid.com所示.
如果他们不是其他东西,您可以通过显式或使用shift命令遍历@ARGV来访问它们:
while (my $arg = shift) {
print "Found argument $arg\n";
}
Run Code Online (Sandbox Code Playgroud)
(请注意,shift只有在所有subs 之外的情况下才能执行此操作.在a中sub,它将检索传递给sub传递给程序的参数列表,而不是传递给程序的参数列表.)
小智 5
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
Run Code Online (Sandbox Code Playgroud)