我如何将命令行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 。