Что Perl делает с этим аргументом, чтобы выдвинуть в этом случае? - PullRequest
8 голосов
/ 30 марта 2010

Я только что увидел некоторый код в нашей кодовой базе (и это старый код, как в Perl 3 или Perl 4 дня), который выглядит следующим образом (я значительно упрощаю):

 @array;
 push( array, $some_scalar );

Обратите внимание, что array в push() не имеет @. Я предполагаю, что код push знает, что первый аргумент должен быть массивом, поэтому он получает массив из типа array. Это более или менее так? Если Perl может сделать это без проблем, зачем вам вообще включать @?

Ответы [ 3 ]

9 голосов
/ 30 марта 2010

Это старая «особенность» парсера. Символ @ не является обязательным при нажатии, если переменная является переменной пакета. Многие считают это ошибкой, которая должна быть исправлена. Вы действительно не должны этого делать.

4 голосов
/ 30 марта 2010

Это сомнительная «особенность» perl, устаревшее поведение; это должно быть ошибкой, но это работает.

Если вы включите предупреждения компилятора ( perl -W , настоятельно рекомендуется), он выдаст предупреждение:

Array @aa missing the @ in argument 1 of push() at xx.pl line 2.
2 голосов
/ 31 марта 2010

Николас Кларк объясняет :

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