我在Perl学习中遇到了一个问题.
$a = "Z9"; print ++$a;
Run Code Online (Sandbox Code Playgroud)
打印出来AA0.这很容易理解,增加1的9得到10,Z增加1获得AA.就像99 + 1.但是,如果我翻过Z和9,会发生什么:
$a = "9Z"; print ++$a;
Run Code Online (Sandbox Code Playgroud)
这会得到10.为什么字母Z消失了?它去了哪里?
此致,尼尔
"9Z"被解释为数字,因此在自动增量之前截断非数字结尾.同样的情况也是如此"9 the rest of this string is ignored".
这类似于print "2foo" + "2bar";输出的方式4.
您观察到的字符串魔法"Z9"记录在perlop #Auto-increment和Auto-decrement中
自动增量运算符具有一些额外的内置魔力.如果增加一个数字变量,或者在数值上下文中使用过的变量,则会得到正常的增量.但是,如果变量仅在字符串上下文中使用,因为它已设置,并且其值不是空字符串并且与模式匹配
/^[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"