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

0 perl operator-keyword

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

码:

$var = 'i';
$var++;
print $var;
$var--;
print " * ",$var;
Run Code Online (Sandbox Code Playgroud)

结果:

j ***** -1
Run Code Online (Sandbox Code Playgroud)

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

谢谢

TLP*_*TLP 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"
Run Code Online (Sandbox Code Playgroud)

undef始终被视为数字,特别是在递增之前更改为0(因此undef值的后递增将返回0而不是undef).

自动递减运算符并不神奇.


urz*_*eit 5

perl中没有char类型.'i'和"i"是相同的字符串.问题是为什么++确实增加了char的价值.这里讨论了这个问题:Perl中的递增(++)和递减( - )字符串

  • TL; DR:增量是神奇的,适用于字符串; 减量不是,并且始终将标量视为数字. (3认同)