在Perl中,我如何精确检查$变量是否已定义并包含非零长度字符串?

前端之家收集整理的这篇文章主要介绍了在Perl中,我如何精确检查$变量是否已定义并包含非零长度字符串?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前使用以下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
    ...
    }
原文链接:https://www.f2er.com/Perl/173535.html

猜你在找的Perl相关文章