我在Perl学习中有一个问题。
$a = "Z9"; print ++$a;
打印出AA0
。这很容易理解,增加1的9得到10,Z增加1获得AA。就像99 + 1。
但是,如果我翻过Z和9,会发生什么:
$a = "9Z"; print ++$a;
这将获得10
。为什么字母Z消失了?它去了哪里?
此致 尼尔
答案 0 :(得分:5)
"9Z"
被解释为数字,因此在自动递增之前,非数字结尾会被截断。 "9 the rest of this string is ignored"
也是如此。
这类似于print "2foo" + "2bar";
输出4
的方式。
"Z9"
/^[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"
- {{1}}
醇>