在Perl中检查string是否为空的正确方法是什么?
我刚刚使用这个代码来检查一个string是否为空:
if ($str == "") { // ... }
和不等于运算符一样…
if ($str != "") { // ... }
这似乎工作(我认为),但我不知道这是正确的方式,或者如果有任何不可预知的缺点。 有些事情对此感觉不对。
要在Perl中进行string比较,请使用eq
或ne
:
if ($str eq "") { // ... }
==
和!=
运算符是数字比较运算符。 他们将尝试将两个操作数转换为整数,然后再比较它们。
有关更多信息,请参阅perlop手册页。
-
由于string存储在Perl中的方式,获取string的长度是优化的。
if (length $str)
是一个检查string是否为空的好方法。 -
如果你还没有防范
undef
,那么不会警告的“非空”的if (defined $str and length $str)
-catchif (defined $str and length $str)
。
正如几个人已经提到的那样, eq
在这里是正确的运营商。
如果您use warnings;
在你的脚本中,你会得到关于这个(和许多其他有用的东西)的警告。 我build议use strict;
以及。
您可能要使用“eq”而不是“==”。 如果你担心一些边缘情况,你可能还想检查未定义的:
if (not defined $str) { # this variable is undefined }
除了使用CPAN之外,“正确”做任何事情的概念在Perl中都是不存在的。
反正那些是数字运算符,你应该使用
if($foo eq "")
要么
if(length($foo) == 0)
要检查一个空string,你也可以按如下方式做一些事情
if (!defined $val || $val eq '') { # empty }