我目前使用以下Perl来检查变量是否已定义并包含文本。我必须首先检查定义,以避免“未初始化值”警告:
if (defined $name && length $name > 0) { # do something with $name }
有没有更好的(大概更简洁)的方式来写这个?
解决方法
你经常看到定义的检查,所以你不必处理使用undef值的警告(在Perl 5.10它告诉你的错误变量):
Use of uninitialized value $name in ...
所以,为了解决这个警告,人们想出了各种各样的代码,并且该代码开始看起来像解决方案的重要部分,而不是泡泡糖和管道胶带,它是。有时,最好通过明确关闭您要避免的警告来显示您的操作:
{ no warnings 'uninitialized'; if( length $name ) { ... } }
在其他情况下,使用某种空值而不是数据。使用Perl 5.10’s defined-or operator,您可以给长度一个显式的空字符串(定义,并回零长度),而不是将触发警告的变量:
use 5.010; if( length( $name // '' ) ) { ... }
在Perl 5.12中,它有点容易,因为length
on an undefined value also returns undefined.这可能看起来像一点蠢,但是喜欢我可能想要的数学家。这不会发出警告,这是这个问题存在的原因。
use 5.012; use warnings; my $name; if( length $name ) { # no warning ... }