如果变量设置为 undef,perl 会死,对吗?

perl die if a variable is set to undef, correct?

许多 Perl 库 returns 如果内部发生故障则取消定义。
例如 DBI :

my $result = $sth->fetchrow_hashref();

简单地在一行中停止我的程序(顶部调用者有一个评估),因为这个独特的结果总是与我相关,看看是否一切正常,并且比 try/catch 更轻,可以我总是写:

my $result = $theLibraryCall or die "ERROR ..." 

它也适用于值 0。

定义或运算符//

较新版本的 perl 支持 Defined-or 运算符 - //.

my $result = theLibraryCall() // die "ERROR ...";

在较旧的 perl 版本中,您可以使用

defined(  my $result = theLibraryCall() ) || die "ERROR ...";
# Dies if f() returns any false value (incl, but not limited to, undefined)
my $result = f()
   or die ...;

# Dies if f() returns an undefined value
defined( my $result = f() )
   or die ...;

# Dies if f() returns nothing at all
my ($result) = f()
   or die ...;

如您所见,my $result = f() or die ...; 不仅会因未定义的值而死,还会因所有假值而死。

要仅在返回未定义值时终止,请使用以下方法之一:

defined( my $result = f() )
   or die ...;
my $result = f()
   // die ...;

请注意,它们略有不同。第一个在检查之前执行赋值,而另一个在赋值之前执行检查。