我如何处理死掉的 perl 构造函数?
How can I handle a perl constructor that dies?
代码片段:
my $tz = DateTime::TimeZone->new(name => 'America/San_Francisco');
这会立即消失,因为 America/San_Francisco
不是 recognized timezone。
打印以下消息:
无法加载时区 'America/San_Francisco',或者是一个无效名称。
我想处理这个错误并在脚本退出之前为用户打印附加信息。我尝试使用 unless
,但没有找到 die
.
如何做到这一点?
使用 eval { ... }
和 $@
捕获和管理致命错误。
my $tz = eval { DateTime::TimeZone->new(name => 'America/San_Francisco') };
if (!$tz) {
if ($@ =~ /The timezone .* could not be loaded/) {
warn "Choose a timezone from ",
"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List";
} else {
warn "Error in DateTime::TimeZone constructor: $@";
}
exit 1;
}
代码片段:
my $tz = DateTime::TimeZone->new(name => 'America/San_Francisco');
这会立即消失,因为 America/San_Francisco
不是 recognized timezone。
打印以下消息:
无法加载时区 'America/San_Francisco',或者是一个无效名称。
我想处理这个错误并在脚本退出之前为用户打印附加信息。我尝试使用 unless
,但没有找到 die
.
如何做到这一点?
使用 eval { ... }
和 $@
捕获和管理致命错误。
my $tz = eval { DateTime::TimeZone->new(name => 'America/San_Francisco') };
if (!$tz) {
if ($@ =~ /The timezone .* could not be loaded/) {
warn "Choose a timezone from ",
"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List";
} else {
warn "Error in DateTime::TimeZone constructor: $@";
}
exit 1;
}