Вопрос или проблема
$ perl -wle 'my @388=0..2;'
Нельзя использовать глобальный @388 в "my" на -e строке 1, около "my @388"
Выполнение -e прервано из-за ошибок компиляции.
$ perl -wle '@388=0..2;'
$
Где я могу узнать больше о загадочных @0
, …, @9999
и т.д.?
Это “специальные идентификаторы” первого типа, упомянутые в perldata
:
[…] специальные идентификаторы не следуют вышеперечисленным правилам; В большинстве случаев все идентификаторы в этой категории имеют специальное значение, задаваемое Perl. Поскольку у них есть специальные правила разбора, их, как правило, нельзя полностью квалифицировать. Они бывают в шести формах (но не используйте формы 5 и 6):
- Сигнум, за которым следуют только цифры, соответствующие
\p{POSIX_Digit}
, такие как$0
,$1
или$10000
.
Все $0
, @0
и %0
подпадают под этот тип идентификаторов, но $0a
, @0a
и %0a
— нет, и они вызовут синтаксическую ошибку, если вы попытаетесь их использовать.
Поскольку эти имена начинаются с цифры, они также всегда имеют область видимости в пакете main
и не могут быть локализованы с помощью my
. Это упоминается в руководстве perlvar
:
Идентификаторы Perl, которые начинаются с цифр или знаков препинания, освобождаются от воздействия декларации
package
и всегда находятся в пакетеmain
; они также освобождаются от ошибокstrict 'vars'
.
Скалярные числовые переменные ($0
, $1
, $2
, …) зарезервированы и документированы. Переменная $0
содержит имя текущей программы, в то время как остальные являются доступными только для чтения и содержат захваченные значения из последнего совпадения регулярного выражения.
Массивные и хэш-переменные с теми же именами не используются Perl никаким документированным образом (кроме как с “особым значением”, как упомянуто выше) и потенциально могут быть использованы кем-то, кто захочет написать запутанный код на Perl.
Ответ или решение
Документация по массивам Perl @0, @9999 и другим "специальным идентификаторам"
Perl является мощным и гибким языком программирования, который предоставляет разработчикам множество возможностей. Одной из особенностей Perl является возможность использования так называемых "специальных идентификаторов", таких как @0, @9999 и другие массивы, начинающиеся с цифр. Понимание этой концепции может потребоваться как новичкам, так и опытным разработчикам.
Специальные идентификаторы
Массивы, такие как @0 и @9999, относятся к "специальным идентификаторам" первой категории, которые документированы в разделе perldata. В этом разделе говорится, что специальные идентификаторы имеют уникальное значение и не следуют стандартным правилам разбора идентификаторов в Perl:
- Они начинаются с сигила (например, @ для массивов) и имеют только числовые значения, соответствующие шаблону
\p{POSIX_Digit}
. - Эти идентификаторы не могут быть полностью квалифицированы и могут ввести в заблуждение разработчиков, если они не знакомы с их особенностями.
По этой причине переменные, такие как $0, @0, %0 и т.д., имеют особые правила использования. Например, массив @388 не может быть объявлен как my @388
из-за конфликта с правилами определения переменных в Perl, что было проиллюстрировано в приведенном вами коде.
Область видимости и локализация
Не менее важным аспектом является область видимости массивов, начинающихся с цифр. Согласно переменной документации perlvar:
- Идентификаторы, которые начинаются с цифр или знаков препинания, всегда будут находиться в пакете
main
, игнорируя декларации пакета и ошибкиstrict 'vars'
. Это значит, что такие массивы не могут быть локализованы с помощьюmy
, что ограничивает их использование.
Это правило необходимо учитывать, если вы планируете использовать специальные массивы для хранения данных или создания обфусцированного кода.
Документация и дополнительные ресурсы
Если вас интересует более глубокое понимание особенностей специальных идентификаторов, рекомендуется внимательно изучить следующие материалы:
- perldata – Введение в специфические конструкции языка Perl, включая специальные идентификаторы.
- perlvar – Документация по переменным в Perl, где вы сможете узнать о правилах именования и использовании переменных, начинающихся с цифр.
Эти ресурсы предоставят вам более обширное понимание того, как работает Perl и как используются специальные идентификаторы.
Заключение
Использование массивов, начинающихся с цифр, в Perl может представлять собой сложную задачу, особенно для тех, кто только начинает работать с языком. Понимание специфики их использования и ограничения, связанные с ними, позволит вам более эффективно писать код. Тщательное изучение упомянутых разделов документации поможет вам избежать потенциальных ошибок и лучше разобраться в особенностях языка.