在Perl中检查string是否为空的正确方法是什么?

我刚刚使用这个代码来检查一个string是否为空:

if ($str == "") { // ... } 

和不等于运算符一样…

 if ($str != "") { // ... } 

这似乎工作(我认为),但我不知道这是正确的方式,或者如果有任何不可预知的缺点。 有些事情对此感觉不对。

要在Perl中进行string比较,请使用eqne

 if ($str eq "") { // ... } 

==!=运算符是数字比较运算符。 他们将尝试将两个操作数转换为整数,然后再比较它们。

有关更多信息,请参阅perlop手册页。

  1. 由于string存储在Perl中的方式,获取string的长度是优化的。
    if (length $str)是一个检查string是否为空的好方法。

  2. 如果你还没有防范undef ,那么不会警告的“非空”的if (defined $str and length $str) -catch if (defined $str and length $str)

正如几个人已经提到的那样, eq在这里是正确的运营商。

如果您use warnings; 在你的脚本中,你会得到关于这个(和许多其他有用的东西)的警告。 我build议use strict; 以及。

您可能要使用“eq”而不是“==”。 如果你担心一些边缘情况,你可能还想检查未定义的:

 if (not defined $str) { # this variable is undefined } 

除了使用CPAN之外,“正确”做任何事情的概念在Perl中都是不存在的。

反正那些是数字运算符,你应该使用

 if($foo eq "") 

要么

 if(length($foo) == 0) 

要检查一个空string,你也可以按如下方式做一些事情

 if (!defined $val || $val eq '') { # empty }