如何区分Perl中的0和空格?

时间:2009-04-07 10:33:33

标签: perl whitespace

我的程序中有以下代码:

$val = chr(someFunction());

if($val == " ")
{
    #do something

}
elsif($val == 0)
{
   #do something else
}

但是每当0传递给$ val时,if部分执行而不是我期望执行的elsif。

我该如何解决这个问题?

谢谢。

3 个答案:

答案 0 :(得分:23)

==运算符用于比较数值。如果要比较字符串,则应使用eq运算符。

if ($val eq " ") ...

答案 1 :(得分:5)

有几种方法可以解决此问题(TIMTOWDI)。您可以从标准looks_like_a_number包中导入Scalar::Util函数:

if (looks_like_a_number($val) and $val == 0) {
    #do something
}

您可以使用字符串相等运算符

if ($val eq 0) {
    #do something
}

如果你有Perl 5.10,你可以使用智能匹配运算符

if ($val ~~ 0) {
    #do something
}

还有更多。您使用哪种方法在很大程度上取决于您要实现的目标。

答案 2 :(得分:3)

如果您启用了警告,您就会知道问题所在。

运行:

use strict;
use warnings;

my $val = chr(someFunction());

if($val == " ")
{
    #do something

}
elsif($val == 0)
{
   #do something else
}

sub someFunction {
    return 1;
}

你得到: C:> test.pl 参数“”在C:\ test.pl第6行的数字eq(==)中不是数字。 参数“^ A”在C:\ test.pl第6行的数字eq(==)中不是数字。

添加使用诊断程序为我们提供了另外的解释:

   (W numeric) The indicated string was fed as an argument to an operator
   that expected a numeric value instead.  If you're fortunate the message
   will identify which operator was so unfortunate.

所以,既然我们不想要数字eq,我们需要字符串eq:eq。如果您还不知道,可以查看perldoc perlop以了解Equality Operators

这是使用warningsstrict pragma如何节省时间的典型示例。