我如何将命令行parameter passing给Perl程序?

我正在处理一个Perl脚本。 我如何将命令行parameter passing给它?

例:

script.pl "string1" "string2" 

取决于你想做什么。 如果你想使用这两个参数作为input文件,你可以将它们传入然后用<>来读取它们的内容。

如果它们具有不同的含义,则可以使用GetOpt::StdGetOpt::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 。