我试图使用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"
但该文件未提供正确的数据。你能告诉我哪里出错了吗?
谢谢
答案 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。