Вам нужно использовать 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