gpt4 book ai didi

perl - 在较新的 Getopt::Long 如何设置默认可选值

转载 作者:行者123 更新时间:2023-12-04 00:25:12 26 4
gpt4 key购买 nike

在 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默认值是 20 放入 %opts下键 codon-view-c给出了但没有明确的值(value)。另一方面 -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

gnu_compat controls whether --opt= is allowed, and what it should do. Without gnu_compat, --opt= gives an error. With gnu_compat, --opt= will give option opt and empty value. This is the way GNU getopt_long() does it.



所以,如果你同意 --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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com