gpt4 book ai didi

perl - Getopts 在没有破折号的情况下标记错误的选项

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

Getopt::Long::Configure("no_pass_through");
my %opts = ();
GetOptions(\%opts,
'opt1=s',
'opt2=s',
'opt3'
);

test.pl bad_option_without_dash

当传递的错误选项没有破折号时,如何让 getopts 标记错误?我原以为 no_pass_through 会解决这个问题。我错过了什么?

最佳答案

Getopt::Long 只是提取选项。由您来验证这些选项的值和非选项参数(留在 @ARGV 中)。

具体来说,如果你想确保只传递了选项,那么你可以使用

@ARGV == 0
or die("usage\n");

我用的是什么:

use Getopt::Long qw( );

my ( $opt_opt1, $opt_opt2, $opt_opt3 );

sub parse_args {
( $opt_opt1, $opt_opt2, $opt_opt3 ) = ();

Getopt::Long::Configure(qw( posix_default ));
Getopt::Long::GetOptions(
'help|h|?' => \&help,
'opt1=s' => \$opt_opt1,
'opt2=s' => \$opt_opt2,
'opt3' => \$opt_opt3,
)
or usage();

# Validate $opt_* here if necessary.

!@ARGV
or usage("Too many arguments.");

return @ARGV;
}

sub main {
# my () = @_; # This program doesn't accept non-option args.
...
}

main(parse_args());

助手:

use File::Basename qw( basename );

sub help {
my $prog = basename($0);
print
"Usage:
$prog [options]
$prog --help

Options:
--opt1 FOO
...

--opt2 BAR
...

--opt3
...
";
exit(0);
}

sub usage {
if (@_) {
my ($msg) = @_;
chomp($msg);
say STDERR $msg;
}

my $prog = basename($0);
say STDERR "Try '$prog --help' for more information.";
exit(1);
}

关于perl - Getopts 在没有破折号的情况下标记错误的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60120324/

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