Каковы допустимые символы для именования модулей и подпрограмм perl5? - PullRequest
0 голосов
/ 17 января 2019

Это

[A-Za-z] и :: для имен модулей

и [A-Za-z_-] для имен подпрограмм?

P.S. Я пишу регулярное выражение для анализа некоторых отладочных выводов.

1 Ответ

0 голосов
/ 17 января 2019

См. perlvar ; Поскольку именованные подпрограммы являются просто переменными в stash пакета, они имеют те же требования к идентификатору, что и другие переменные. perldata содержит все мелкие детали. Помните, что символы юникода допустимы в идентификаторах, если у вас активен use utf8;, который будет декодировать ваш исходный код из UTF-8.

Имена пакетов являются лишь частью имен переменных, поэтому они имеют те же ограничения, плюс они могут содержать разделители :: или ', однако здесь есть дополнительное практическое ограничение для любого модуля, который вы use, потому что это преобразует его в имя файла, а затем это зависит от того, что поддерживает ваша файловая система. Многие части цепочки инструментов CPAN также не оснащены для работы с именами пакетов, отличных от ASCII. Так что это вообще не очень хорошая идея. Здесь есть несколько модулей Acme , которые проверяют воду здесь.

По существу:

  • если use utf8 не активен, идентификаторы могут состоять из «любого символа слова в диапазоне ASCII, если первый символ не является цифрой». «Слово символ» здесь означает [a-zA-Z0-9_].
  • , если use utf8 активен, идентификаторы могут начинаться с символа «начало» Юникода или подчеркивания, за которым следуют символы «продолжить» Юникода. Все символы дополнительно должны быть символами Unicode.

Дефис - недопустим ни в каких идентификаторах (за исключением идентификаторов пунктуации, указанных ниже).

Существуют также «специальные идентификаторы», которые состоят в основном из специальных глобалов Perl: переменные, состоящие только из цифр, переменные, состоящие из одного знака пунктуации, переменные, состоящие из ^, за которыми следует буква, и переменные, состоящие из ^ за которым следует слово с необходимыми скобками (например, @{^CAPTURE}). Ни один из них не используется для дополнительных функций, которые я могу вспомнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...