我的程序中有以下代码:
$val = chr(someFunction());
if($val == " ")
{
#do something
}
elsif($val == 0)
{
#do something else
}
但是,只要将 0 传递给 $val,if 部分就会执行,而不是我希望执行的 elsif。
我怎样才能解决这个问题?
谢谢你。
我的程序中有以下代码:
$val = chr(someFunction());
if($val == " ")
{
#do something
}
elsif($val == 0)
{
#do something else
}
但是,只要将 0 传递给 $val,if 部分就会执行,而不是我希望执行的 elsif。
我怎样才能解决这个问题?
谢谢你。
运算符用于比较==
数值。如果要比较字符串,则应使用eq
运算符。
if ($val eq " ") ...
有几种方法可以解决这个问题(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
}
还有很多。您使用哪种方法在很大程度上取决于您要达到的目标。
如果您启用了警告,您就会知道问题所在。
运行这个:
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”在数字 eq (==) 中不是数字在 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
。如果您还不知道这一点,您可以查看perldoc perlop
有关Equality Operators的信息。
这是一个典型的例子,说明使用warnings
and strict
pragma 如何节省时间。