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

在Perl中,检查字符串是否为空的正确方法是什么?,perl,string,comparison,Perl,String,Comparison,我刚刚使用此代码检查字符串是否为空: if ($str == "") { // ... } 不等于运算符也是一样的 if ($str != "") { // ... } 这似乎是可行的(我认为),但我不确定这是正确的方法,或者是否有任何不可预见的缺点。有些地方就是感觉不对。对于Perl中的字符串比较,请使用eq或ne: if ($str eq "") { // ... } ==和=运算符是数值比较运算符。在比较两个操作数之前,它们将尝试将两个操作数转换为整数 有关更多信息,请参

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

if ($str == "")
{
  // ...
}
不等于运算符也是一样的

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

这似乎是可行的(我认为),但我不确定这是正确的方法,或者是否有任何不可预见的缺点。有些地方就是感觉不对。

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

if ($str eq "")
{
  // ...
}
==
=运算符是数值比较运算符。在比较两个操作数之前,它们将尝试将两个操作数转换为整数

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

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

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

if($foo eq "")

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

if (not defined $str) {

# this variable is undefined

}

正如一些人已经提到的,
eq
是这里的正确操作符

如果
使用警告在脚本中,您将得到关于此的警告(以及许多其他有用的东西);我建议
严格使用也是

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

  • 如果您所处的环境尚未防范
    undef
    ,则不会发出警告的“non-empty”的全部内容是
    If(defined$str和length$str)


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

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

    是的,使用这个,但是你需要小心,如果它是未定义的,并且如果你使用警告,你会得到一个运行时警告。但是有很多方法可以绕过警告。+1很酷,是的,我通常使用
    使用strict
    ,但我正在更新一些旧代码,所以当我添加这些代码时,会出现数百个错误。也许有一天我会修正它们。Perl确实不倾向于提倡解决问题的“一种真正的方法”,但这并不意味着没有强烈偏好的习惯用法、风格和方法。另外,正如一位Perl常客喜欢说的那样,即使有不止一种方法来做事情,但有些方法确实非常糟糕(愚蠢、不明智、难以维护等),仅仅因为有很多方法来做并不意味着所有方法都是平等的。例如,使用
    if($foo==“”)
    测试空字符串是完全错误的,除非您实际上是想测试在数值上下文中计算的
    $foo
    是否具有0的值(在这种情况下,如果($foo==0)
    ,则最好将其写成
    if($foo==0)
    ,因为这更清楚地表达了您的意图)。我认为长度是我们对字符串中没有任何内容这一概念的最接近的测试。向上投票是因为
    if(length($str))
    是一种很好的方法,如果未定义变量,则不会失败。当通过移动可能包含0个元素的数组来获得字符串时,这非常有用。
    if (!defined $val || $val eq '')
    {
        # empty
    }