在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”语句的第一个分支,请改用正则表达式。非常感谢您的解释:)