Подтвердить что ты не робот

Является ли "моя" функция в Perl?

Я знаю, что my используется для объявления переменной local в блоке или файле. Я всегда предполагал, что my является ключевым словом в Perl. Но мне просто сказали, что это действительно функция. Одним из доказательств является то, что perldoc помещает my в раздел "Функции", см. http://perldoc.perl.org/functions/my.html.

Как функция выполняет работу по объявлению локальных переменных?

4b9b3361

Ответ 1

Да, по определению Perl (очень уникальное) my является функцией. Начальный абзац perlfunc определяет "функцию":

Функции в этом разделе могут служить членами в выражении. Они подразделяются на две основные категории: операторы списка и названные унарные операторы.

my является именованным оператором. Но он особенный двумя способами:

  • В дополнение к тому, чтобы вести себя как функция (которая выделяет новую переменную и возвращает эту переменную), она имеет эффект компиляции.
  • my ... является унарным оператором, но он может принимать несколько аргументов при использовании парсеров.

Если, с другой стороны, вы спрашивали, является ли my функцией по определению C, тогда нет. my не является функцией C. Также нет print, open, chr и т.д. Все в perlfunc является оператором; ни одна из них не является функцией.


Наконец, print, open и chr намного ближе к понятию человека о функции, чем my. Чтобы быть более точным, мало кто считал бы my функцией. Это скорее техничность, чем что-либо значимое, что оно соответствует определению функции perfunc.


См. также:

Ответ 2

my не является функцией, он просто сжимается вместе с функциями (в документации perl), поскольку он работает как функция.

Если вы посмотрите perldoc perlfunc, то оно будет указано,

Вот функции Perl (включая вещи, которые похожи на функции, такие как некоторые ключевые слова и названные операторы), упорядоченные по категориям...

затем немного ниже этого

Ключевые слова, связанные с определением сферы охвата
caller, import, local, my, our, package, state, use

В частности, обратите внимание, что вместо слова "function" вместо слова "function" было использовано слово "keyword"

Итак, это означает, что вы найдете некоторые не-функции (например, ключевые слова) в Perl-функциях A-Z

Другой способ сказать это: если что-то указано в разделе "Функции" в perldoc, это не обязательно функция – это может быть ключевое слово или именованный оператор, который действует как функция.