Почему подпрограмма «import» не написана с заглавной буквы в Perl - PullRequest
6 голосов
/ 19 февраля 2011

Мне любопытно.Большинство неявно вызываемых подпрограмм Perl должны быть названы во всех заглавных буквах.TIESCALAR, DESTROY и т. Д. На самом деле perldoc perltoot говорит

Если конструкторы могут иметь произвольные имена, то почему не деструкторы?Потому что, хотя конструктор вызывается явно, деструктор - нет.Уничтожение происходит автоматически через систему сборки мусора (GC) Perl, которая является быстрой, но несколько ленивой системой GC, основанной на ссылках.Чтобы знать, что вызывать, Perl настаивает на том, чтобы деструктор был назван DESTROY.Представление Perl о правильном времени для вызова деструктора в настоящее время недостаточно определено, поэтому ваши деструкторы не должны полагаться на них при вызове.

Почему DESTROY во всех заглавных буквах?В некоторых случаях Perl использует чисто прописные имена функций в качестве соглашения, указывающего на то, что функция будет автоматически вызываться Perl каким-либо образом.Другие, которые неявно вызываются, включают BEGIN, END, AUTOLOAD, а также все методы, используемые связанными объектами, описанными в perltie.

Почему тогда подпрограмма import остается в нижнем регистре?У кого-нибудь есть хорошее понимание этого?

Ответы [ 3 ]

6 голосов
/ 19 февраля 2011

Я бы сказал, что "import" не вызывается неявно.Это явный вызов, выданный реализацией use.Для цитирования perldoc используйте :

Это в точности эквивалентно:

BEGIN { require Module; Module->import( LIST ); }

3 голосов
/ 20 февраля 2011

Чтобы немного расширить ответ DVK, существуют ситуации, когда вы на законных основаниях хотели бы вызвать import явно, например, при загрузке дополнительного модуля или автоматически заполняемых пространств имен:

eval "require $modulename; $modulename->import( LIST ); ";

Iне могу придумать ни одной ситуации, когда вы бы когда-либо хотели бы явно вызвать DESTROY, TIESCALAR и т. д.

1 голос
/ 20 февраля 2011

Это просто упущение в дизайне.Слишком поздно что-либо менять.

...