Сравнение% 2B в Perl - PullRequest
       0

Сравнение% 2B в Perl

3 голосов
/ 13 февраля 2012

Я просто пытаюсь проверить, равна ли строка "% 2B", и если это так, я изменяю ее на "+". Проблема заключается в сравнении.

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

Когда $ lastItem является чем-то совершенно другим (например, «привет»), оно все равно будет включено в оператор. Я ломал голову, и я просто не могу сказать, где я ошибся. Есть ли у% 2B какое-то особое значение? Я очень плохо знаком с Perl.

Спасибо

Ответы [ 3 ]

8 голосов
/ 13 февраля 2012

Вам нужно использовать eq при сравнении строк, или Perl попытается преобразовать строку в число (которое будет 0), и вы найдете такие странности, как "a" == 0 оценить истину. И, сравнивая две строки, вы, конечно же, фактически получите 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
3 голосов
/ 13 февраля 2012

Я думаю, вы действительно хотите следующее:

use URI::Escape qw( uri_unescape );

my $unescaped_last_item = uri_unescape($escaped_last_item);

URI :: Бегство

Пожалуйста, используйте use strict; use warnings;!

2 голосов
/ 13 февраля 2012

Еще один пример, когда включение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...