字符串匹配

use*_*868 3 string perl match

我写了一个代码:

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";
}
Run Code Online (Sandbox Code Playgroud)

它告诉我str = str2.但这是错误的.只有$ str ='http://ya.ru'; 这是真的.怎么了?

rai*_*7ow 10

你应该将字符串与eqoperator 进行比较,如下所示:

if ($str eq $str2) { ... }
Run Code Online (Sandbox Code Playgroud)

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

numbers | strings
----------------- 
  ==    |   eq
  !=    |   ne
  <     |   lt
  >     |   gt
  <=    |   le
  >=    |   ge
 <=>    |  cmp    
Run Code Online (Sandbox Code Playgroud)

否则将使用数字比较:两个操作数将被转换为数字,并且将比较此转换的结果.由于两个字符串都是从非数字符号开始(即使在修剪后),它也会有效地变为(0 == 0).

请注意,如果你已经开始使用脚本,那么你实际上会在你面前找到这个答案.

use warnings;
Run Code Online (Sandbox Code Playgroud)

... pragma,就像我在这里所做的那样:

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.
Run Code Online (Sandbox Code Playgroud)