Является ли "моя" функция в Perl?
Я знаю, что my
используется для объявления переменной local в блоке или файле. Я всегда предполагал, что my
является ключевым словом в Perl. Но мне просто сказали, что это действительно функция. Одним из доказательств является то, что perldoc
помещает my
в раздел "Функции", см. http://perldoc.perl.org/functions/my.html.
Как функция выполняет работу по объявлению локальных переменных?
Ответы
Ответ 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, это не обязательно функция – это может быть ключевое слово или именованный оператор, который действует как функция.