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

我只是用这段代码来检查一个字符串是否为空:

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

非等于运算符也是如此。

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

这似乎工作(我认为) ,但我不确定这是正确的方式,或如果有任何不可预见的缺点。感觉有点不对劲。

246435 次浏览

For string comparisons in Perl, use eq or ne:

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

The == and != operators are numeric comparison operators. They will attempt to convert both operands to integers before comparing them.

See the perlop man page for more information.

The very concept of a "proper" way to do anything, apart from using CPAN, is non existent in Perl.

Anyways those are numeric operators, you should use

if($foo eq "")

or

if(length($foo) == 0)

You probably want to use "eq" instead of "==". If you worry about some edge cases you may also want to check for undefined:

if (not defined $str) {


# this variable is undefined


}

As already mentioned by several people, eq is the right operator here.

If you use warnings; in your script, you'll get warnings about this (and many other useful things); I'd recommend use strict; as well.

  1. Due to the way that strings are stored in Perl, getting the length of a string is optimized.
    if (length $str) is a good way of checking that a string is non-empty.

  2. If you're in a situation where you haven't already guarded against undef, then the catch-all for "non-empty" that won't warn is if (defined $str and length $str).

To check for an empty string you could also do something as follows

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