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

时间:2010-01-11 23:16:38

标签: perl string comparison

我刚刚使用此代码检查字符串是否为空:

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

与非等于运算符一样......

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

这似乎有效(我认为),但我不确定这是正确的方法,还是有任何不可预见的缺点。对此感觉不对劲。

6 个答案:

答案 0 :(得分:120)

对于Perl中的字符串比较,请使用eqne

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

==!=运算符是数字比较运算符。在比较它们之前,它们将尝试将两个操作数转换为整数。

有关详细信息,请参阅perlop手册页。

答案 1 :(得分:87)

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

  2. 如果您处于尚未防范undef的情况,那么不会发出警告的“非空”的全部是if (defined $str and length $str)

答案 2 :(得分:9)

您可能想要使用“eq”而不是“==”。 如果您担心某些边缘情况,您可能还需要检查undefined:

if (not defined $str) {

# this variable is undefined

}

答案 3 :(得分:9)

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

如果您在脚本中use warnings;,则会收到有关此内容的警告(以及许多其他有用的内容);我也推荐use strict;

答案 4 :(得分:4)

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

无论如何,这些都是数字运算符,你应该使用

if($foo eq "")

if(length($foo) == 0)

答案 5 :(得分:0)

要检查空字符串,您还可以执行以下操作

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