我写了一个代码:
my $str = 'http://www.ykt.ru/cgi-bin/go?http://ya.ru';
my $str2 = 'http://ya.ru';
if ($str == $str2)
{
print "str = str2";
}
else
{
print "str != str2";
}
它告诉我str = str2。但这是错误的。仅当 $str = 'http://ya.ru'; 这将是真的。怎么了?
您应该将字符串与eq
运算符进行比较,如下所示:
if ($str eq $str2) { ... }
这实际上是一个非常方便的助记规则:字母代表字符串,非字母代表数字(因为每个符号比较运算符都有一个“冗长”的替代方案):
numbers | strings
-----------------
== | eq
!= | ne
< | lt
> | gt
<= | le
>= | ge
<=> | cmp
否则将使用数字比较:两个操作数都将转换为数字,并将比较此转换的结果。由于两个字符串都从非数字符号开始(即使在修剪之后),它实际上变成了(0 == 0)
.
请注意,如果您以...开始脚本,您实际上会在您面前提出这个答案
use warnings;
...编译指示,就像我在这里所做的那样:
Argument "http://ya.ru" isn't numeric in numeric eq (==) at t.pl line 5.
Argument "http://www.ykt.ru/cgi-bin/go?http://ya.ru" isn't numeric in numeric eq (==) at t.pl line 5.