我正在做一个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}”
任何想法/解决方案?
答案 0 :(得分:4)
您的代码适用于我,但看起来该功能最近才添加到Getopt :: Long(版本2.35),因此您可能拥有旧版本的Getopt :: Long。运行
perl -MGetopt::Long -le'print $Getopt::Long::VERSION;'
查看您的版本。
答案 1 :(得分:4)
我认为你的问题可能是f{3}
。 f
用于 float 参数(实数)。
如果您将字符串作为参数,则应使用s
说明符。关于论点的数量,文档说:
也可以指定选项所需的最小和最大参数数。 foo = s {2,4}表示一个至少包含两个且最多四个参数的选项。 foo = s {,}表示一个或多个值; foo:s {,}表示零个或多个选项值。
考虑来自文档的hise note并根据您的需要进行调整。
答案 2 :(得分:2)
我不确定为什么人们没有提供这个解决方案,但是这篇文章太旧了,现在可能为时已晚,无法提供帮助。
我找不到自动方法。
您需要做的是引用多个参数并在代码中解析它们:
perl myscript.pl -m 'a b c'
然后在代码中拆分-m参数值并从那里做必要的事情。
答案 3 :(得分: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'