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

kse8i1jr  于 2022-12-13  发布在  Perl
关注(0)|答案(7)|浏览(310)

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

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

不等于运算符也是一样...

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

这看起来很有效(我认为),但我不确定这是不是正确的方法,或者是否有任何不可预见的缺点。

dzhpxtsq

dzhpxtsq1#

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

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

==!=运算符是 numeric 比较运算符。它们会尝试在比较两个操作数之前将它们转换为整数。
有关更多信息,请参考perlop手册页.

iyfjxgzm

iyfjxgzm2#

1.由于Perl中字符串的存储方式,获取字符串长度的过程得到了优化。
if (length $str)是检查字符串是否为非空的好方法。
1.如果你还没有防范undef,那么if (defined $str and length $str)就是一个“非空”的陷阱,不会发出警告。

dauxcl2d

dauxcl2d3#

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

if (not defined $str) {

# this variable is undefined

}
fumotvh3

fumotvh34#

正如已经提到的一些人,eq是这里正确的运算符。
如果你在脚本中使用use warnings;,你会得到关于这个的警告(以及其他很多有用的东西);我也推荐use strict;

jv4diomz

jv4diomz5#

除了使用CPAN之外,Perl中不存在“适当”的方式来做任何事情的概念。
无论如何,这些都是数字运算符,您应该使用

if($foo eq "")

if(length($foo) == 0)
eni9jsuy

eni9jsuy6#

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

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

oxiaedzo7#

剩下的答案让事情复杂化了。
如果填充

if ($var) {

}

如果未填写

if (! $var) {

}

相关问题