在 Perl 的 Getopt::Long 2.39 版中,我可以使用
use Getopt::Long qw( :config gnu_getopt );
GetOptions(
\my %opts,
"codon-view|c:20", # Optional value, default 20
"consensus|C:50",
...
)
表示如果我使用
-c
,当给出 %opts
但没有明确的值时,默认值将是 20 放在 codon-view
键下的 -c
中。另一方面,未提供 -c
或 --codon-view
,则哈希表中没有值存储在 %opts
中。在 2.48 中这不再有效,我在 Getopt::Long's documentation 中看不到
$ perl -E'
use Getopt::Long qw( :config gnu_getopt );
say $Getopt::Long::VERSION;
GetOptions(\my %opts, "codon-view|c:20");
say $opts{"codon-view"} // "[undef]"
' -- -c
2.39
20
$ perl -E'
use Getopt::Long qw( :config gnu_getopt );
say $Getopt::Long::VERSION;
GetOptions(\my %opts, "codon-view|c:20");
say $opts{"codon-view"} // "[undef]"
' -- -c
2.48
[undef]
我怎样才能实现旧的行为?
帮助!
最佳答案
这是 2.48 中引入的更改。
$ perl -E'
use Getopt::Long qw( :config gnu_getopt );
say $Getopt::Long::VERSION;
GetOptions(\my %opts, "codon-view|c:20");
say $opts{"codon-view"} // "[undef]"
' -- -c
2.47
20
$ perl -E'
use Getopt::Long qw( :config gnu_getopt );
say $Getopt::Long::VERSION;
GetOptions(\my %opts, "codon-view|c:20");
say $opts{"codon-view"} // "[undef]"
' -- -c
2.48
[undef]
我不确定,但我认为这是无意的,所以我提交了 bug report 。
use Getopt::Long qw( :config gnu_getopt );
是简称
use Getopt::Long qw( :config gnu_compat bundling permute no_getopt_compat );
您在使用
gnu_compat
方面投入了多少?$ perl -E'
use Getopt::Long qw( :config gnu_getopt );
say $Getopt::Long::VERSION;
GetOptions(\my %opts, "codon-view|c:20");
say $opts{"codon-view"} // "[undef]"
' -- -c
2.48
[undef]
$ perl -E'
use Getopt::Long qw( :config gnu_compat bundling permute no_getopt_compat );
say $Getopt::Long::VERSION;
GetOptions(\my %opts, "codon-view|c:20");
say $opts{"codon-view"} // "[undef]"
' -- -c
2.48
[undef]
$ perl -E'
use Getopt::Long qw( :config bundling permute no_getopt_compat );
say $Getopt::Long::VERSION;
GetOptions(\my %opts, "codon-view|c:20");
say $opts{"codon-view"} // "[undef]"
' -- -c
2.48
20
因此,如果您对
--codon-view=
将零分配给 $opts{"codon-view"}
没问题,只需使用use Getopt::Long qw( :config bundling permute no_getopt_compat );
代替
use Getopt::Long qw( :config gnu_getopt );
关于perl - 在较新的 Getopt::Long 如何设置默认可选值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37579192/