我刚刚一直在使用这个代码来检查,如果一个字符串是空的:在Perl中检查字符串是否为空的正确方法是什么?
if ($str == "")
{
// ...
}
而且还与不等于运算符一样......
if ($str != "")
{
// ...
}
这似乎是工作(我想想),但我不确定这是否是正确的方式,或者是否有任何不可预见的缺陷。有些事情对此感觉不对。
我刚刚一直在使用这个代码来检查,如果一个字符串是空的:在Perl中检查字符串是否为空的正确方法是什么?
if ($str == "")
{
// ...
}
而且还与不等于运算符一样......
if ($str != "")
{
// ...
}
这似乎是工作(我想想),但我不确定这是否是正确的方式,或者是否有任何不可预见的缺陷。有些事情对此感觉不对。
对于在Perl字符串比较,使用eq
或ne
:
if ($str eq "")
{
// ...
}
的==
和!=
运营商数字比较运算符。他们会尝试将两个操作数转换为整数,然后再比较它们。
有关更多信息,请参阅perlop手册页。
除了使用CPAN之外,“正确”做任何事情的概念在Perl中都是不存在的。
反正这些都是数字运营商,你应该使用
if($foo eq "")
或
if(length($foo) == 0)
的确,Perl并不倾向于提倡解决问题的“一个真正的方法”,但这并不意味着没有强烈偏好的习惯用法,样式和方法。另外,正如Perl的一位常客喜欢说的那样,即使有不止一种方法来做事情,一些做事的方式真的非常糟糕(愚蠢,不明智,难以维护等) – Telemachus
只是因为有很多方法才能做到这并不意味着所有的方式都是平等的。例如,使用if($ foo ==“”)'测试空字符串*是明确错误的*,除非您实际上是在测试数值上下文中计算的$ foo是否具有值0在这种情况下,它会*更好地写成'if($ foo == 0)',因为它更清楚地表达你的意图)。 –
你可能想使用 “EQ”,而不是 “==”。 如果你担心,你可能还需要检查未定义一些边缘情况:
if (not defined $str) {
# this variable is undefined
}
当你通过移动可能有0个元素的数组来获得字符串时非常有用。 – Dacav
由于已经由几个人提到,eq
在这里正确的操作。
如果您在脚本中使用了use warnings;
,则会收到有关此警告(以及其他许多有用的内容)的警告;我推荐use strict;
。
+1酷,是的,我通常使用'严格',但我更新一些旧的代码,所以当我添加这个时,我得到了数百个错误。我可能会在一天之内修复它们。 –
由于字符串存储在Perl中的方式,获取字符串的长度被优化。
if (length $str)
是一个检查字符串是否为空的好方法。
如果您的情况下,您尚未对undef
进行防范,那么不会警告的“非空”的招聘信息是if (defined $str and length $str)
。
我认为这个长度是最接近的测试,我们必须表达这个想法,即字符串中没有任何东西。 –
Upvoted是因为'if(length($ str))'是一个不错的方法,如果变量没有被定义也不会失败。 – basic6
要检查是否有一个空字符串,你也可以做一些事情如下
if (!defined $val || $val eq '')
{
# empty
}
是啊,用这个虽然你需要保持谨慎,如果它是民主基金,如果你正在使用你的警告会得到一个运行时警告。许多方法来解决警告。 –