perl:在出现故障时捕获GetOptions
使用perl:在出现故障时捕获GetOptions,perl,getopt,Perl,Getopt,使用Getopt::Long,我希望捕获GetOptions中的任何失败,而不是将它们打印到STDOUT/STDERR,我希望打印出一个用法字符串并退出脚本。我尝试将对GetOptions的调用包装在Try::TinyTry/catch块中,但没有被捕获。我不知道这里的幕后发生了什么 我如何在GetOptions中捕获失败,阻止它打印,并打印我自己的用法语句?它使用warn,因此您可以使用$SIG{uuuuu warn}。我想说,除了由GetOptions发现的特定错误之外,最好提供一个用法声明
Getopt::Long
,我希望捕获GetOptions
中的任何失败,而不是将它们打印到STDOUT/STDERR,我希望打印出一个用法字符串并退出脚本。我尝试将对GetOptions
的调用包装在Try::Tiny
Try/catch
块中,但没有被捕获。我不知道这里的幕后发生了什么
我如何在
GetOptions
中捕获失败,阻止它打印,并打印我自己的用法语句?它使用warn
,因此您可以使用$SIG{uuuuu 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.");
}
子用法{
my$prog=basename($0);
如果(我的($msg)=@\{
咀嚼(味精);
警告(“$msg\n”);
}
警告(“有关详细信息,请尝试“$prog--help”。\n”);
出口(1);
}
辅助帮助{
my$prog=basename($0);
打印(以下是我的工作:
eval {
local $SIG{__WARN__} = sub { die $_[0] };
GetOptions( \%opt, ... );
};
if ( $@ ) {
...
}
例如,请参见\uuuu WARN\uuuu
钩子上的。但我也会留下Getopt
的消息,因为它们很好,并添加我自己的消息。