使用Getopt::Long
,我想從GetOptions
捕獲任何失敗,而不是將它們打印到STDOUT/STDERR,我想打印出一個用法字符串並退出腳本。我嘗試在Try::Tiny
try/catch
區塊中打電話給GetOptions
,但它沒有被捕獲。我不確定這裏幕後發生了什麼事。perl:當某事失敗時捕獲GetOptions
如何捕獲GetOptions
中的故障,防止打印,並打印我自己的使用說明?
使用Getopt::Long
,我想從GetOptions
捕獲任何失敗,而不是將它們打印到STDOUT/STDERR,我想打印出一個用法字符串並退出腳本。我嘗試在Try::Tiny
try/catch
區塊中打電話給GetOptions
,但它沒有被捕獲。我不確定這裏幕後發生了什麼事。perl:當某事失敗時捕獲GetOptions
如何捕獲GetOptions
中的故障,防止打印,並打印我自己的使用說明?
它使用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.");
}
這是我做的:
eval {
local $SIG{__WARN__} = sub { die $_[0] };
GetOptions(\%opt, ...);
};
if ([email protected]) {
...
}
參見[此帖](https://stackoverflow.com/a/44011471/4653379)(例如),在'__WARN__'掛鉤。但我也留下了'Getopt'的消息,因爲它們很好,並且添加了我自己的消息。 – zdim