使用Getopt::Long
,我希望从GetOptions
捕获任何失败,而不是将它们打印到STDOUT / STDERR,我想打印出Usage字符串并退出脚本。我尝试将调用包裹在GetOptions
Try::Tiny
块中的try/catch
,但它并没有被抓住。我不确定幕后会发生什么。
如何捕获GetOptions
中的故障,阻止其打印,并打印我自己的使用说明呢?
答案 0 :(得分:1)
它使用warn
,因此您可以使用$SIG{__WARN__}
。我会说除了GetOptions
找到的特定错误之外,还提供一个使用声明会更好。
sub usage {
my $prog = basename($0);
if (my ($msg) = @_) {
chomp($msg);
warn("$msg\n");
}
warn("Try `$prog --help' for more information.\n");
exit(1);
}
sub help {
my $prog = basename($0);
print(<<"__EOS__");
usage: $prog [options] [--] {foo} {bar}
$prog --help
Options:
...
__EOS__
exit(0);
}
sub parse_args {
GetOptions(
'h|?|help' => \&help,
...,
)
or usage();
@ARGV == 2
or usage("Too many arguments.");
}
答案 1 :(得分:0)
这就是我的所作所为:
eval {
local $SIG{__WARN__} = sub { die $_[0] };
GetOptions( \%opt, ... );
};
if ( $@ ) {
...
}