当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何将命令行参数传递给Perl程序?》经验,为你挑选了8个好方法。

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

例:

script.pl "string1" "string2"

user44511.. 188

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

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

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

如果它们具有不同的含义,您可以轻松使用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 [0]是第一个参数; perl从0开始计数,程序名称为$ 0而不是@ARGV.
尽管$ ARGV [0]混淆了..这是我希望找到的答案,当我搜索SO时,感谢和+1来自我.

2> George Stock..:

你就像你想的那样传递它们,并且在你的脚本中,你从数组中获取它们@ARGV.像这样:

my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";

foreach my $argnum (0 .. $#ARGV) {

   print "$ARGV[$argnum]\n";

}

从这里开始.


而不是'$#ARGV + 1`你也可以说'@ ARGV`
值得注意的是,在某些编程语言中,第一个(0)参数是命令或脚本本身......当然,在perl中并非如此.

3> 小智..:
foreach my $arg (@ARGV) {
    print $arg, "\n";
}

将打印每个参数.



4> 小智..:

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

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

"假设"传递了两个值.额外的代码可以验证假设是否安全.


不确定这是什么新信息,但我决定反对一个downvote,因为你是新的.

5> Joao Costa..:

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

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



6> pkm..:

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

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

perl tmp.pl 1 2 3 4 5

在此输入图像描述



7> Dave Sherohm..:

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

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只有在所有subs 之外的情况下才能执行此操作.在a中sub,它将检索传递给sub传递给程序的参数列表,而不是传递给程序的参数列表.)



8> 小智..:
my $output_file;

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

{

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


}

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有