В кавычках perlop :
Если, однако, переменная использовалась только в строковых контекстах с момента ее установки и имеет значение, которое не является пустой строкойи соответствует шаблону /^[a-zA-Z]*[0-9]*\z/
, приращение выполняется в виде строки, сохраняя каждый символ в пределах его диапазона, с переносом.
Диапазоны: 0-9, AZ и az.Когда требуется новый персонаж, он берется из диапазона первого символа.Каждый диапазон независим;символы никогда не покидают диапазон, в котором они начали.
9z
не соответствует шаблону, поэтому он получает числовое приращение.(Вероятно, должно выдаваться предупреждение «Аргумент не числовой», но в Perl 5.10.1 это не так.) Цифры допускаются только после всех букв (если они есть), никогда перед ними.
Обратите внимание, что строковая цифра соответствует шаблону, а получает приращение строки (если оно никогда не использовалось в числовом контексте).Однако результат приращения строки в такой строке идентичен числовому приращению, за исключением того, что он имеет бесконечную точность и ведущие нули (если таковые имеются) сохраняются.(Таким образом, вы можете заметить разницу только тогда, когда число цифр превышает то, что может хранить IV или NV, или если оно имеет начальные нули.)
Я не понимаю, почему вы думаете, Zz
должно стать Aa
(если вы не думаете о модульной арифметике, но это не так).Это становится AAa
посредством этого процесса:
- Увеличение
z
оборачивается до a
.Увеличение предыдущего символа. - Увеличение
Z
оборачивается до A
.Предыдущего символа не существует, поэтому добавьте первый из этого диапазона, который является другим A
.
Оператор диапазона (..
), если заданы две строки(и левый соответствует шаблону), использует приращение строки для создания списка (это объясняется в конце этого раздела).Список начинается с левого операнда, который затем увеличивается до:
- Значение равно правому операнду или
- Длина значения превышает длинуправого операнда.
Возвращает список всех значений.(Если случай 2 завершил список, окончательное значение не включается в него.)