如何设置 GetOpt 的默认值?
Posted
技术标签:
【中文标题】如何设置 GetOpt 的默认值?【英文标题】:How to set default values for GetOpt? 【发布时间】:2014-05-15 23:26:39 【问题描述】:我认为这很简单:
my $man = 0;
my $help = 0;
my @compList = ('abc', 'xyz');
my @actionList = ('clean', 'build');
## Parse options and print usage if there is a syntax error,
## or if usage was explicitly requested.
GetOptions('help|?' => \$help, man => \$man, 'complist:s@' => \@compList, 'action:s@' => \@actionList) or pod2usage(2);
但是,当我这样做时:
script.pl --action clean
我打印我的actionList
,它只是将我的参数附加到末尾:clean build clean
【问题讨论】:
【参考方案1】:对于标量,在调用 GetOptions 时设置默认值。但是,对于数组,您需要更明确地说明您的逻辑。
## Parse options and print usage if there is a syntax error,
## or if usage was explicitly requested.
GetOptions(
'help|?' => \(my $help = 0),
'man' => \(my $man = 0),
'complist:s@' => \my @compList,
'action:s@' => \my @actionList,
) or pod2usage(2);
# Defaults for array
@compList = qw(abc xyz) if !@compList;
@actionList = qw(clean build) if !@actionList;
注意,因为$help
和$man
只是布尔标志,实际上不需要初始化它们。除非您尝试在某处打印它们的值,否则依赖它们的默认值 undef
可以正常工作。
【讨论】:
谢谢 - 我已经做了你的改变,但现在我注意到了别的东西;数组中仅保存一个值:--complist COMPA COMPB
仅生成 COMPA
【参考方案2】:
您可以在GetOptions
之后设置默认值,如下所示:
my @compList;
GetOptions('complist:s@' => \@compList) or pod2usage(2);
@compList = qw(abc xyz) unless @compList;
【讨论】:
以上是关于如何设置 GetOpt 的默认值?的主要内容,如果未能解决你的问题,请参考以下文章