2012-11-08 254 views
3

我写了代码:字符串匹配

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"; 
} 

,它让我发现,海峡= STR2。但这是错误的。只有在$ str ='http://ya.ru';这将是事实。怎么了?

+2

总是使用警告 – Tim

回答

10

你应该eq操作比较字符串,像这样:

if ($str eq $str2) { ... } 

它实际上是一个非常方便的记忆规则:字符串,非字母字母 - 为数字(每个符号比较操作有一个“罗嗦'替代):

numbers | strings 
----------------- 
    == | eq 
    != | ne 
    <  | lt 
    >  | gt 
    <= | le 
    >= | ge 
<=> | cmp  

否则将使用数字比较:两个操作数将被转换为数字,并将对该转换的结果进行比较。由于两个字符串都从非数字符号开始(即使在修剪之后),它实际上变成了(0 == 0)

注意,你居然会对这个答案之前设,如果你已经开始用你的脚本...

use warnings; 

...编译,就像我做here

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.