在Perl中自动增量功能发生了什么?

时间:2014-06-09 03:20:52

标签: perl

我在Perl学习中有一个问题。

$a = "Z9"; print ++$a;

打印出AA0。这很容易理解,增加1的9得到10,Z增加1获得AA。就像99 + 1。 但是,如果我翻过Z和9,会发生什么:

$a = "9Z"; print ++$a;

这将获得10。为什么字母Z消失了?它去了哪里?

此致 尼尔

1 个答案:

答案 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"匹配,则增量以字符串形式完成,保留每个字符内的每个字符它的范围,带有:

     
      
  1. print ++($foo = "a0"); # prints "a1"
  2.   
  3. print ++($foo = "Az"); # prints "Ba"
  4.   
  5. print ++($foo = "zz"); # prints "aaa"
  6.   
  7. {{1}}
  8.