我有一个使用script -p "first argument" "second argument" ... "nth arg"
GetOptions("p=s" => \@CHOSEN_PKGS)
由于某种原因,当我遍历数组@CHOSEN_PKGS时,第一个值是空字符串,或者是一些未初始化的变量。
if(@CHOSEN_PKGS) {
foreach my $PKG(@CHOSEN_PKGS) {
print "Pkg: $PKG";
}}
...打印
Pkg:
Pkg: <first argument>
Pkg: <second argument>
知道为什么吗?
答案 0 :(得分:3)
您是否在致电@CHOSEN_PKGS
之前设置了GetOptions
?如果是这样,那么你可以有一个空白的第一个元素:
@CHOSEN_PKGS = ' ';
我无法重现您的结果。当我使用这段代码时:
use warnings;
use Getopt::Long;
GetOptions("p=s" => \@CHOSEN_PKGS);
if (@CHOSEN_PKGS) {
foreach my $PKG (@CHOSEN_PKGS) {
print "Pkg: $PKG";
print "\n";
}
}
这是我得到的:
script -p "first argument" "second argument" "nth arg"
Pkg: first argument
如果我使用-p
3次,我会:
script -p "first argument" -p "second argument" -p "nth arg"
Pkg: first argument
Pkg: second argument
Pkg: nth arg
另请参阅:Getopt::Long