См. perlvar ; Поскольку именованные подпрограммы являются просто переменными в stash пакета, они имеют те же требования к идентификатору, что и другие переменные. perldata содержит все мелкие детали. Помните, что символы юникода допустимы в идентификаторах, если у вас активен use utf8;
, который будет декодировать ваш исходный код из UTF-8.
Имена пакетов являются лишь частью имен переменных, поэтому они имеют те же ограничения, плюс они могут содержать разделители ::
или '
, однако здесь есть дополнительное практическое ограничение для любого модуля, который вы use
, потому что это преобразует его в имя файла, а затем это зависит от того, что поддерживает ваша файловая система. Многие части цепочки инструментов CPAN также не оснащены для работы с именами пакетов, отличных от ASCII. Так что это вообще не очень хорошая идея. Здесь есть несколько модулей Acme , которые проверяют воду здесь.
По существу:
- если
use utf8
не активен, идентификаторы могут состоять из «любого символа слова в диапазоне ASCII, если первый символ не является цифрой». «Слово символ» здесь означает [a-zA-Z0-9_]
.
- , если
use utf8
активен, идентификаторы могут начинаться с символа «начало» Юникода или подчеркивания, за которым следуют символы «продолжить» Юникода. Все символы дополнительно должны быть символами Unicode.
Дефис -
недопустим ни в каких идентификаторах (за исключением идентификаторов пунктуации, указанных ниже).
Существуют также «специальные идентификаторы», которые состоят в основном из специальных глобалов Perl: переменные, состоящие только из цифр, переменные, состоящие из одного знака пунктуации, переменные, состоящие из ^
, за которыми следует буква, и переменные, состоящие из ^
за которым следует слово с необходимыми скобками (например, @{^CAPTURE}
). Ни один из них не используется для дополнительных функций, которые я могу вспомнить.