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

在Perl中如何区分0和空格?,perl,whitespace,Perl,Whitespace,我的程序中有以下代码: $val = chr(someFunction()); if($val == " ") { #do something } elsif($val == 0) { #do something else } 但是,只要将0传递给$val,就会执行if部分,而不是我希望执行的elsif部分 我怎样才能解决这个问题 谢谢。运算符用于比较数值。如果要比较字符串,应使用eq运算符 if ($val eq " ") ... 有几种方法可以解决此问题()。您可以从标

我的程序中有以下代码:

$val = chr(someFunction());

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

}
elsif($val == 0)
{
   #do something else
}
但是,只要将0传递给$val,就会执行if部分,而不是我希望执行的elsif部分

我怎样才能解决这个问题


谢谢。

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

if ($val eq " ") ...

有几种方法可以解决此问题()。您可以从标准的
Scalar::Util
包中导入
looks\u like\u number
函数:

if (looks_like_a_number($val) and $val == 0) {
    #do something
}
可以使用字符串相等运算符

if ($val eq 0) {
    #do something
}
如果您有Perl5.10,那么可以使用智能匹配操作符

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

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

如果启用了警告,您就会知道问题出在哪里

运行以下命令:

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行的数字等式(=)中不是数字。 参数“^A”在C:\test.pl第6行的数字等式(=)中不是数字

添加使用诊断为我们提供了以下附加说明:

   (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
。如果您还不知道这一点,您可以查看
perldocperlop
了解相关信息


这是使用
警告
严格
pragmas节省时间的经典示例。

此外,您确定要测试$val是否正好是一个空格字符吗?如果希望在$val包含一个或多个空格时执行“If”语句的第一个分支,请改用正则表达式。非常感谢您的解释:)