4

我正在做一个 perl 脚本,我需要从命令行获取多个值。例子:

perl script.pl --arg1 op1 op2 op3

我正在使用 Getopt::Long 我可以让它工作:

perl script.pl --arg1 op1 --arg1 op2 --arg1 op3

但我真的需要(想要)第一个选项。

我检查了他们的文档,这应该可以满足我的要求:

GetOptions('arg1=s{3}' => \@myArray);

http://search.cpan.org/~jv/Getopt-Long-2.38/lib/Getopt/Long.pm#Options_with_multiple_values

但我收到了这个错误:

选项规范中的错误:“arg1=f{3}”

有什么想法/解决方案吗?

4

4 回答 4

4

我认为你的问题可能是f{3}f用于浮点参数(实数)。s如果您有字符串作为参数,则应该使用说明符。关于参数的数量,文档说:

还可以指定选项采用的最小和最大参数数量。foo=s{2,4} 表示一个选项,它至少需要两个,最多 4 个参数。foo=s{,} 表示一个或多个值;foo:s{,} 表示零个或多个选项值。

考虑文档中的他的注释并根据您的需要进行调整。

于 2012-05-11T20:18:36.920 回答
4

您的代码对我有用,但看起来该功能最近才添加到 Getopt::Long(版本 2.35),因此您可能拥有旧版本的 Getopt::Long。跑

perl -MGetopt::Long -le'print $Getopt::Long::VERSION;'

看看你有什么版本。

于 2012-05-11T20:18:12.650 回答
2

我不确定为什么人们不提供这个解决方案,但是这篇文章太老了,现在可能已经太晚了,无法提供帮助。

我发现没有一种自动的方法可以做到这一点。

您需要做的是引用多个参数并在代码中解析它们:

perl myscript.pl -m 'a b c'

然后在代码中拆分 -m 参数值并从那里做任何必要的事情。

于 2013-09-03T04:40:34.833 回答
0

与getoptions function perl multi value not working类似的问题,我猜......无论如何,似乎只是使用"optlist=s" => \@list,对我有用,将重复/重复选项存储在数组中;这是我的版本:

$ perl --version | grep This && perl -MGetopt::Long -le'print $Getopt::Long::VERSION;'
This is perl, v5.10.1 (*) built for i686-linux-gnu-thread-multi
2.38

一个例子(test.pl):

#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
my $numone = 0;
my $numtwo = 1;
my @list=();
my $result;
$result = GetOptions (
  "numone=i" => \$numone,
  "numtwo=i"   => \$numtwo,
  "optlist=s" => \@list,
);

printf("result: %d;\n", $result);
printf("numone: %d, numtwo %d, optlist:\n", $numone, $numtwo);

foreach my $tmplist (@list) {
  printf(" entry: '%s'\n", $tmplist);
}

测试输出:

$ perl test.pl --numone 10 --numtwo 20 --optlist testing --optlist more --optlist options
result: 1;
numone: 10, numtwo 20, optlist:
 entry: 'testing'
 entry: 'more'
 entry: 'options'
于 2014-06-12T19:41:39.883 回答