以下代码显示的输出与预期不同。 '我'应该是ans。
代码:
$var = 'i';
$var++;
print $var;
$var--;
print " * ",$var;
结果:
j ***** -1
有人可以解释一下行为吗?我知道我错过了一件非常愚蠢的事情。
由于
答案 0 :(得分:7)
自动增量运算符++
是“神奇的”,因为它也可以增加非数字字符串。因此i
变为j
。自动递减运算符--
没有这种“神奇”功能。因此,字符串j
将转换为数字0
,然后递减为-1
。
perldoc perlop中记录了这一点:
自动增量运算符有一点额外的内置魔力。如果 您递增一个数字变量,或者曾经使用过的变量 在数字上下文中,您获得正常的增量。但是,如果 变量仅在字符串上下文中使用,因为它已设置,并且 具有不是空字符串的值并匹配模式 / ^ [a-zA-Z] [0-9] \ z /,增量以字符串形式完成,保留 其范围内的每个字符都带有:
print ++($foo = "99"); # prints "100" print ++($foo = "a0"); # prints "a1" print ++($foo = "Az"); # prints "Ba" print ++($foo = "zz"); # prints "aaa"
undef始终被视为数字,特别是更改为0 在递增之前(以便undef值的后递增) 返回0而不是undef)。
自动减量运算符并不神奇。
答案 1 :(得分:5)
perl中没有char类型。 'i'和“i”是相同的字符串。问题是为什么++确实增加了char的价值。这个问题已经在这里讨论过:Increment (++) and decrement (--) strings in Perl