Perl中的自动增量函数发生了什么?

Perl中的自动增量函数发生了什么?,perl,Perl,我在Perl学习中有个问题 $a = "Z9"; print ++$a; 它打印出AA0。这很容易理解,9增加1得到10,Z增加1得到AA。就像99+1一样。 但是如果我翻过Z和9会发生什么 $a = "9Z"; print ++$a; 这将得到10。为什么字母Z不见了?它去哪儿了 问候,, Neil“9Z”被解释为一个数字,因此非数字结尾在自动递增之前被截断。同样的情况也适用于“9忽略此字符串的其余部分” 这类似于打印“2foo”+“2bar”将输出4 您通过“Z9”观察到的字符串魔力在

我在Perl学习中有个问题

$a = "Z9"; print ++$a;
它打印出
AA0
。这很容易理解,9增加1得到10,Z增加1得到AA。就像99+1一样。 但是如果我翻过Z和9会发生什么

$a = "9Z"; print ++$a;
这将得到
10
。为什么字母Z不见了?它去哪儿了

问候,, Neil

“9Z”
被解释为一个数字,因此非数字结尾在自动递增之前被截断。同样的情况也适用于
“9忽略此字符串的其余部分”

这类似于
打印“2foo”+“2bar”将输出
4

您通过
“Z9”
观察到的字符串魔力在

自动递增操作符有一点额外的内置魔法。如果递增数值变量,或在数值上下文中使用过的变量,则会得到正常增量。但是,如果变量自设置以来仅在字符串上下文中使用,并且其值不是空字符串,并且与模式
/^[a-zA-Z]*[0-9]*\Z/
匹配,则增量作为字符串进行,保留其范围内的每个字符,进位:

  • print++($foo=“99”)#打印“100”
  • print++($foo=“a0”)#打印“a1”
  • print++($foo=“Az”)#打印“Ba”
  • print++($foo=“zz”)#打印“aaa”
  • “9Z”
    被解释为一个数字,因此非数字结尾在自动递增之前被截断。同样的情况也适用于
    “9忽略此字符串的其余部分”

    这类似于
    打印“2foo”+“2bar”将输出
    4

    您通过
    “Z9”
    观察到的字符串魔力在

    自动递增操作符有一点额外的内置魔法。如果递增数值变量,或在数值上下文中使用过的变量,则会得到正常增量。但是,如果变量自设置以来仅在字符串上下文中使用,并且其值不是空字符串,并且与模式
    /^[a-zA-Z]*[0-9]*\Z/
    匹配,则增量作为字符串进行,保留其范围内的每个字符,进位:

  • print++($foo=“99”)#打印“100”
  • print++($foo=“a0”)#打印“a1”
  • print++($foo=“Az”)#打印“Ba”
  • print++($foo=“zz”)#打印“aaa”

  • 你说得对,米勒。我发现任何字母后面跟一个数字都会被截断,不管它有多长,不管是哪一个。num+alph的任何递增或递减操作都只会生成数字部分并截断字母部分。也许这是Perl的一种机制。@NeilWang,如文档所述,神奇的自动递增模式只匹配0个或多个字母,后跟0个或多个数字。其他任何东西(例如,后面跟字母的数字)都与模式不匹配,因此您会得到一个正常的数字增量。您是对的,Miller。我发现任何字母后面跟一个数字都会被截断,不管它有多长,不管是哪一个。num+alph的任何递增或递减操作都只会生成数字部分并截断字母部分。也许这是Perl的一种机制。@NeilWang,如文档所述,神奇的自动递增模式只匹配0个或多个字母,后跟0个或多个数字。其他任何内容(例如,数字后面跟字母)都与模式不匹配,因此您会得到一个正常的数字增量。