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

Nic*_*ton 88 string perl comparison

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

if ($str == "")
{
  // ...
}
Run Code Online (Sandbox Code Playgroud)

和不等于运算符的情况一样......

if ($str != "")
{
  // ...
}
Run Code Online (Sandbox Code Playgroud)

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

Gre*_*ill 124

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

if ($str eq "")
{
  // ...
}
Run Code Online (Sandbox Code Playgroud)

==!=运营商的数字比较操作符.在比较它们之前,它们将尝试将两个操作数转换为整数.

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


hob*_*bbs 88

  1. 由于字符串存储在Perl中的方式,因此优化了字符串的长度.
    if (length $str)检查字符串是否为空是一种很好的方法.

  2. 如果你处于一种你还没有防范过的情况undef,那么不会发出警告的"非空"的全部内容就是if (defined $str and length $str).

  • 我认为长度是我们对字符串中没有任何内容的想法的最接近的测试. (6认同)
  • Upvoted,因为`if(length($ str))`是一个很好的方法,如果没有定义变量也不会失败. (6认同)

Dmi*_*ryK 9

您可能希望使用"eq"而不是"==".如果您担心某些边缘情况,您可能还需要检查undefined:

if (not defined $str) {

# this variable is undefined

}
Run Code Online (Sandbox Code Playgroud)

  • 当您通过移动可能有 0 个元素的数组来获取字符串时非常有用。 (2认同)

Mat*_*ery 9

正如几个人已经提到的那样,eq这里是合适的运营商.

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


wha*_*ame 5

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

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

if($foo eq "")
Run Code Online (Sandbox Code Playgroud)

或者

if(length($foo) == 0)
Run Code Online (Sandbox Code Playgroud)

  • 诚然,Perl 并不倾向于提倡解决问题的“一种真正的方式”,但这并不意味着没有强烈偏爱的习语、风格和方法。此外,正如一位 Perl 常客喜欢说的那样,即使有不止一种做事方式,*某些*做事方式真的非常非常糟糕(愚蠢、不明智、难以维护) , 等等。) (4认同)
  • 仅仅因为有很多方法可以做到,并不意味着所有方法都是平等的。例如,使用 `if ($foo == "")` 测试空字符串是*绝对错误的*,除非您实际上是想测试在数字上下文中计算的 `$foo` 是否具有 0 (在这种情况下,*仍然* 最好写成`if ($foo == 0)`,因为这更清楚地表达了你的意图)。 (3认同)

小智 5

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

if (!defined $val || $val eq '')
{
    # empty
}
Run Code Online (Sandbox Code Playgroud)