2014-01-22 34 views
-1

我有使用script -p "first argument" "second argument" ... "nth arg"的Perl getoptions:空字符串显示为第一个参数

GetOptions("p=s" => \@CHOSEN_PKGS) 

出于某种原因,一个perl脚本,当我循环通过阵列@CHOSEN_PKGS,第一值是一个空字符串,或一些未初始化的变量。

if(@CHOSEN_PKGS) { 
     foreach my $PKG(@CHOSEN_PKGS) { 
      print "Pkg: $PKG"; 
}} 

打印...

Pkg: 
Pkg: <first argument> 
Pkg: <second argument> 

任何想法,为什么?

+0

显示你的'使用Getopt :: Long'行,看看你是否设置了任何非默认选项。 – toolic

回答

3

你在拨打GetOptions之前是否正在设置@CHOSEN_PKGS?如果是这样,那么你可以有一个空白的第一个元素:

@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

相关问题