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

そしてそれは私にstr=str2であることを示しています。しかし、それは誤りです。$ str='http://ya.ru'の場合のみ; それは本当でしょう。どうしたの?

4

1 に答える 1

10

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.
于 2012-11-08T22:02:59.607 に答える