gpt4 book ai didi

perl - Perl中的自动递增字母

转载 作者:行者123 更新时间:2023-12-04 00:06:16 25 4
gpt4 key购买 nike

我不明白 Perl 中的自动递增字母。

这个例子似乎完全可以理解:

$a = 'bz'; ++$a;
ca #output
b增加到 c . z 什么都没有了去,所以它回到 a (或者至少这是我看待这个过程的方式)。

但后来我遇到这样的陈述:
$a = 'Zz'; ++$a;
AAa #output

和:
$a = '9z'; ++$a;
10 #output

为什么不递增 Zz返回 Aa ?为什么不增加 9z返回 0z ?

谢谢!

最佳答案

报价 perlop :

If, however, the variable has been used in only string contexts since it was set, and has a value that is not the empty string and matches the pattern /^[a-zA-Z]*[0-9]*\z/, the increment is done as a string, preserving each character within its range, with carry.



范围是 0-9、A-Z 和 a-z。当需要一个新字符时,它从第一个字符的范围中取出。每个范围都是独立的;字符永远不会离开他们开始的范围。
9z不匹配模式,所以它得到一个数字增量。 (它可能应该给出“Argument is not numeric”警告,但在 Perl 5.10.1 中没有。) 仅允许使用数字 之后 所有的字母(如果有的话),从来没有在它们之前。

请注意,全数字字符串确实与模式匹配,并且确实接收字符串增量(如果它从未在数字上下文中使用过)。但是,对此类字符串进行字符串增量的结果与数字增量相同,只是它具有无限精度并保留前导零(如果有)。 (因此,只有当位数超过 IV 或 NV 可以存储的位数,或者它有前导零时,您才能分辨出差异。)

我不明白你为什么这么想 Zz应该变成 Aa (除非您正在考虑模算术,但事实并非如此)。变成 AAa通过这个过程:
  • 递增 z转至 a .增加前一个字符。
  • 递增 Z转至 A .没有前一个字符,所以添加这个范围内的第一个字符,即另一个 A .

  • range operator ( .. ),当给定两个字符串(左边的字符串匹配模式)时,使用字符串增量来生成一个列表(这在该部分的末尾附近进行了解释)。该列表以左侧操作数开始,然后递增,直到:
  • 该值等于右侧操作数,或
  • 该值的长度超过了右侧操作数的长度。

  • 它返回所有值的列表。 (如果案例 2 终止了列表,则最终值不包含在其中。)

    关于perl - Perl中的自动递增字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3508362/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com