我只是在尝试检查字符串是否等于“%2B”,并且如果确实将其更改为“+”。
问题在于比较。

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

当$ lastItem是完全不同的东西(例如“hello”)时,它仍将进入语句。我一直在动脑筋,但我无法分辨出哪里出了问题。 %2B是否有某些特殊含义?我是Perl的新手。

谢谢

最佳答案

比较字符串时,您需要使用 eq ,否则perl会尝试将字符串转换为数字(这将是0),并且您会发现诸如"a" == 0这样的奇数来评估true。比较两个字符串时,您当然会有效地得到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

10-07 15:05