以下代码显示的输出不同于预期.'我'应该是ans.
码:
$var = 'i';
$var++;
print $var;
$var--;
print " * ",$var;
Run Code Online (Sandbox Code Playgroud)
结果:
j ***** -1
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下行为吗?我知道我错过了一件非常愚蠢的事情.
谢谢
自动增量运算符++是"神奇的",因为它也可以增加非数字字符串.因此i变得j.自动递减运算符--没有这种"神奇"功能.因此,字符串j将转换为一个数字0,然后递减到-1.
自动增量运算符具有一些额外的内置魔力.如果增加一个数字变量,或者在数值上下文中使用过的变量,则会得到正常的增量.但是,如果变量仅在字符串上下文中使用,因为它已设置,并且其值不是空字符串并且匹配模式/ ^ [a-zA-Z] [0-9]\z /,增量以字符串形式完成,保留其范围内的每个字符,带进位:
Run Code Online (Sandbox Code Playgroud)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).
自动递减运算符并不神奇.
perl中没有char类型.'i'和"i"是相同的字符串.问题是为什么++确实增加了char的价值.这里讨论了这个问题:Perl中的递增(++)和递减( - )字符串
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |