我如何将命令行parameter passing给Perl程序?
我正在处理一个Perl脚本。 我如何将命令行parameter passing给它?
例:
script.pl "string1" "string2"
取决于你想做什么。 如果你想使用这两个参数作为input文件,你可以将它们传入然后用<>
来读取它们的内容。
如果它们具有不同的含义,则可以使用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
或者,@ @ARGV
是一个包含所有命令行参数的特殊variables。 $ARGV[0]
是第一个(即你的情况下的"string1"
), $ARGV[1]
是第二个参数。 你不需要一个特殊的模块来访问@ARGV
。
你就像你想的那样传递它们,在你的脚本中,你可以从数组@ARGV
获得它们。 像这样:
my $numArgs = $#ARGV + 1; print "thanks, you gave me $numArgs command-line arguments.\n"; foreach my $argnum (0 .. $#ARGV) { print "$ARGV[$argnum]\n"; }
从这里 。
foreach my $arg (@ARGV) { print $arg, "\n"; }
将打印每个参数。
或者,一个更性感的完美方式…..
my ($src, $dest) = @ARGV;
“假设”通过了两个值。 额外的代码可以validation假设是安全的。
还有一个select是使用perl -s,例如:
#!/usr/bin/perl -s print "value of -x: $x\n"; print "value of -name: $name\n";
然后像这样调用它:
% ./myprog -x -name=Jeff value of -x: 1 value of -name: Jeff
或者查看原文 ,了解更多详情:
您可以通过将特殊variables@ARGV
分配给variables@ARGV
来直接访问它们。 所以,例如:
( $st, $prod, $ar, $file, $chart, $e, $max, $flag ,$id) = @ARGV;
perl tmp.pl 1 2 3 4 5
如果参数是要从中读取的文件名,请使用菱形(<>)运算符来获取其内容:
while (my $line = <>) { process_line($line); }
如果参数是选项/开关,请使用GetOpt :: Std或GetOpt :: Long,正如slavy13.myopenid.com所示。
如果没有其他的机会,你可以通过明确地或通过shift
命令来访问@ARGV:
while (my $arg = shift) { print "Found argument $arg\n"; }
(请注意,如果你不在所有的sub
之内,只有在这个sub
类之外的情况下才能使用它。在一个sub
,它将检索传递给sub
的参数列表,而不是传递给程序的参数列表。
my $output_file; if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i")) { $output_file= chomp($ARGV[1]) ; }
如果你只是想要一些值,你可以使用@ARGV数组。 但是,如果您正在寻找更强大的function来执行某些命令行选项处理,则应该使用Getopt :: Long 。