繁体   English   中英

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

[英]How can I pass command-line arguments to a Perl program?

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

示例:

script.pl "string1" "string2"

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

如果它们有不同的含义,您可以使用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

你就像你想的那样传递它们,在你的脚本中,你从数组@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";
}

将打印每个参数。

或者,一种更性感的perlish方式......

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

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

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

或查看原文了解更多详情:

您可以通过将特殊变量@ARGV分配给变量@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 所示。

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

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

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

my $output_file;

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

{

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


}

如果你只想要一些值,你可以只使用 @ARGV 数组。 但是如果你正在寻找更强大的东西来进行一些命令行选项处理,你应该使用Getopt::Long

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM