如果变量设置为 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 ...;
请注意,它们略有不同。第一个在检查之前执行赋值,而另一个在赋值之前执行检查。
许多 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 ...;
请注意,它们略有不同。第一个在检查之前执行赋值,而另一个在赋值之前执行检查。