2012-02-13 16 views
3

文字列が "%2B"と等しいかどうかを確認しようとしていますが、それが "+"に変更されているかどうかを確認しようとしています。 問題は比較にあります。perlの%2Bの比較

if ($lastItem == "%2B"){ 
    $lastItem = "+"; 
} 

$ lastItemが完全に異なる(「hello」のような)とき、それはまだステートメントに入ります。私は自分の脳を壊してしまって、どこに間違っているのか分からない。 %2Bには特別な意味がありますか?私はperlにはとても新しいです。あなたは文字列を比較するときeqを使用するか、perlは(0になります)文字列を数値に変換しようとします、そしてあなたが"a" == 0ような奇妙がtrueと評価しています必要

おかげ

答えて

8

。また、2つの文字列を比較すると、もちろん効果的にif (0 == 0)が得られますが、それはあなたが記述している問題です。

if ($lastItem eq "%2B") { 

あなたがuse warningsを使用していた場合は、このワンライナーが示すように、この問題は、発見しやすくなっているということに注意することが重要である:

$ perl -wE 'say "yes" if ("foo" == "bar")' 
Argument "bar" isn't numeric in numeric eq (==) at -e line 1. 
Argument "foo" isn't numeric in numeric eq (==) at -e line 1. 
yes 
+0

ああ私はばかだと感じます。ありがとうございます – user1126345

+1

@ user1126345よくある間違いです。どういたしまして。 – TLP

+0

@ user1126345これがあなたの質問に答えたと思えば、左側のチェックマークをクリックして「受け入れる」ことができます。 – TLP

3

私はあなたが本当に次のことをしたいと思います:

use URI::Escape qw(uri_unescape); 

my $unescaped_last_item = uri_unescape($escaped_last_item); 

URI::Escape

を使用してください!

2

もう1つの例では、use warningsをオンにすると、何が間違っていたかを簡単に確認できました。

$ perl -Mwarnings -e'$l = "x"; if ($l == "%2B") { print "match\n" }' 
Argument "%2B" isn't numeric in numeric eq (==) at -e line 1. 
Argument "x" isn't numeric in numeric eq (==) at -e line 1. 
match