Почему Perl игнорирует пробелы между символом и именем переменной? - PullRequest
3 голосов
/ 05 июня 2019

Вопрос Предполагается ли игнорировать пробел между символом и именем его переменной? был дан положительный ответ.

По какой причине Perl интерпретирует $ foo как $foo?

perl -w -E 'my $  foo = $$; say  "Perl $]\n\$ foo = ", $foo'
Perl 5.028001
$ foo = 3492

Разве это не против Синтаксис имен переменных документация?

Ответы [ 2 ]

5 голосов
/ 05 июня 2019

В этой документации обсуждается только имя , а не сигил .Символ всегда можно отделить от имени пробелами.Это определенно недокументировано, и я бы не советовал когда-либо использовать его, но оно используется.

3 голосов
/ 05 июня 2019

Perl не имеет сигил, у него есть операторы «разыменования»:

$ test [1] означает «дай мне скаляр по индексу 1 массива, названного« test »из этой области».Вот почему вы можете ставить пробелы после "сигилы".

Я не понимаю, почему все продолжают называть их сигилами, это очень запутывает.У BASIC были сигилы, у PHP - сигилы, но у Perl 5 нет, даже если он выглядит так, как есть.Хотелось бы, чтобы я понял, что "сигилы" на самом деле являются операторами, когда я изучал Perl, понимать и анализировать ссылки и разыменовывать было бы намного проще, не говоря уже о манипуляциях с деревом символов-символов.

"Сигилы"не задокументированы как «операторы» в perldoc, но намного проще анализировать код Perl, если вы думаете о них как об операторах.

Позже, после обсуждения в комментариях: вот как Perl 5 использует «сигилы»": https://www.oreilly.com/library/view/advanced-perl-programming/0596004567/ch01.html

...