- - 在perl中没有正常使用char

时间:2013-05-30 09:54:31

标签: perl operator-keyword

以下代码显示的输出与预期不同。 '我'应该是ans。

代码:

$var = 'i';
$var++;
print $var;
$var--;
print " * ",$var;

结果:

j ***** -1

有人可以解释一下行为吗?我知道我错过了一件非常愚蠢的事情。

由于

2 个答案:

答案 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