使用perl中的Getoptions获取数组输入

时间:2014-11-12 22:19:21

标签: perl getopt

我试图使用Getoptions在perl中创建一个文件,其中一个输入是一个数组。我的代码如下所示:

my $filename = 'grid.sh';
my @job_name;
my $output_file;
my $testbench;
my %opts = (
 'job_name' => \@job_name,
 'output' => \$output_file,
 'testbench' => \$testbench,
);
GetOptions(
  \%opts,
 'job_name=s',
'output=s',
'testbench=s'
);
open(my $fh, '>', $filename) or die "Could not open";
for (my $i=0; $i <= 2; $i++) {
print $fh "Job names are $job_name[$i]";
}
   close $fh;

在我的命令行中,我提供输入为

perl grip_script.pl "-job_name test -job_name test1 -job_name test2"

但该文件未提供正确的数据。你能告诉我哪里出错了吗?

谢谢

2 个答案:

答案 0 :(得分:2)

你错误地引用了整个参数列表,从而将它变成了一个无效的参数。

请改为尝试:

perl grip_script.pl --job_name test --job_name test1 --job_name test2

正如bytepusher建议的那样,您还需要修复对GetOptions的调用:

GetOptions(
 'job_name=s' => \@job_name,
 'output' => \$output_file,
 'testbench' => \$testbench,
);

通过这两项更改,我可以运行您的测试脚本并获得预期的结果。

输出:

Job names are testJob names are test1Job names are test2

请注意,您在print语句中缺少换行符,因此所有三个打印调用都显示在同一行。

答案 1 :(得分:0)

你的GetOpts符号让我感到困惑。

为什么传入%opts然后传递更多?

你试过这个吗?

GetOptions(
    'job_name=s' => \@job_name,
'output=s' => \$output_file,
'testbench=s' => \$testbench,
);

此外,请参阅documentation传入多个值的其他示例。

这些值仅在您不在命令行中引用时出现,正如另一个回答者所指出的那样,所以调用

perl grip_script.pl --job_name test --job_name test2 --job_name test3

对我来说,他们都在@job_name。