我刚刚使用此代码检查字符串是否为空:
if ($str == "")
{
// ...
}
与非等于运算符一样......
if ($str != "")
{
// ...
}
这似乎有效(我认为),但我不确定这是正确的方法,还是有任何不可预见的缺点。对此感觉不对劲。
答案 0 :(得分:120)
对于Perl中的字符串比较,请使用eq
或ne
:
if ($str eq "")
{
// ...
}
==
和!=
运算符是数字比较运算符。在比较它们之前,它们将尝试将两个操作数转换为整数。
有关详细信息,请参阅perlop手册页。
答案 1 :(得分:87)
由于字符串存储在Perl中的方式,优化获取字符串的长度
if (length $str)
是检查字符串是否为空的好方法。
如果您处于尚未防范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
}