如何将命令行参数传递给Perl程序?

时间:2008-12-12 03:05:06

标签: perl command-line

我正在研究Perl脚本。如何将命令行参数传递给它?

示例:

script.pl "string1" "string2"

9 个答案:

答案 0 :(得分:186)

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

如果它们具有不同含义,您可以使用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是一个包含所有命令行参数的特殊变量。 $ARGV[0]是第一个(即你的"string1"},$ARGV[1]是第二个参数。您无需使用特殊模块即可访问@ARGV

答案 1 :(得分: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";

}

来自here

答案 2 :(得分:29)

foreach my $arg (@ARGV) {
    print $arg, "\n";
}

将打印每个参数。

答案 3 :(得分:24)

或者,更性感的方式......

my ($src, $dest) = @ARGV;

“假设”传递两个值。额外的代码可以验证假设是否安全。

答案 4 :(得分:19)

另一个选择是使用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

或点击the original article了解详情:

答案 5 :(得分:13)

您可以通过将特殊变量@ARGV分配给变量列表来直接访问它们。 所以,例如:

( $st, $prod, $ar, $file, $chart, $e, $max, $flag ,$id) = @ARGV;

perl tmp.pl 1 2 3 4 5

enter image description here

答案 6 :(得分:7)

如果参数是要读取的文件名,请使用菱形(&lt;&gt;)运算符来获取其内容:

while (my $line = <>) {
  process_line($line);
}

如果参数是选项/开关,请使用GetOpt :: Std或GetOpt :: Long,如slavy13.myopenid.com所示。

如果他们不是其他东西,您可以通过明确地或使用shift命令遍历@ARGV来访问它们:

while (my $arg = shift) {
  print "Found argument $arg\n";
}

(请注意,使用shift执行此操作仅在您不在sub之内时才有效。在sub内,它将检索传递给{{sub的参数列表。 1}}而不是传递给程序的那些。)

答案 7 :(得分:5)

my $output_file;

if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))

{

$output_file= chomp($ARGV[1]) ;


}

答案 8 :(得分:2)

如果您只想要一些值,可以使用@ARGV数组。但是,如果您正在寻找更强大的功能来执行某些命令行选项处理,则应使用Getopt::Long