我如何处理死掉的 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;
}