Изменения

Filter::AutoImport

700 байтов добавлено, 12:42, 20 июня 2016
== Название ==
<tt>Filter::AutoImport — AutoImport</tt> — фильтр для автообъявления часто используемых переменных в методах. Ссылка на исходный код: [{{SVN|vitaphoto/solstice/lib-sway/Filter/AutoImport.pm|markup}} Filter::AutoImport] ([{{SVN|vitaphoto/solstice/lib-sway/Filter/AutoImport.pm|co}} скачать]).
== Как надо использовать Filter::AutoImport ==
<source lang="perl">
use Filter::AutoImport [ОПЦИИ] qw($www $self->www $cfg $self->www->config);
</source>
илиГде ОПЦИИ могут содержать:
;<source lang="perl"tt>use Filter::AutoImport -file_size_limit => 0x1000000, qw($www $self-</tt>www $cfg $self-: лимит размера файла.;<tt>www-inherit</tt>config: в текущем пакете унаследовать импорты (но не опции!);от текущего значения @ISA.;<tt>-all_subs</sourcett>: обработать все функции (sub {}), а не только использующие символ $self.
Определяются только те переменные, которые нужны, и только в методах — то есть, функциях, использующих символ $self (обычно my $self = shift)<tt>'''use''' Filter::AutoImport</tt> без аргументов идентичен вызову с 1 опцией <tt>-inherit</tt>.
Также можно помнить о томОпределяются только те переменные, что последний переданный набор описаний переменных запоминается фильтромкоторые нужны, что удобно использовать по умолчанию только в подклассах базового классаметодах. То естьМетодами считаются функции, в базовом классе передаём qw($www использующие символ $self->www $cfg (обычно my $self->www->config= shift), и все дочерние при сначала use base 'Parent', а потом use Filter::AutoImport получат все те же описания.
== Как НЕ надо использовать Filter::AutoImport == Вот так делать не надо (FIXME):Межимпортные зависимости теперь тоже отслеживаются, т.е. можно писать
<source lang="perl">
use Filter::AutoImport qw($cfg $www $self->www $config $www$self->configwww);
</source>
Потому что на данный момент межимпортные зависимости не отслеживаются.== Как НЕ надо использовать Filter::AutoImport ==
Ещё нужно Нужно понимать, что если символ, используемый в подстановке, в функции будет определён с более ограниченной областью видимости, чем вся функция, то и импорт попадёт в ту же область видимости.
Также, очевидно, неразумно делать подстановочные выражения дающими побочные эффекты, потому что, строго говоря, порядок их подстановки не определён, хотя и гарантируется, что выражение будет подставлено после определения первого упоминания всех символов, в нём использумых. Очевидно также, что <tt>Filter::AutoImport</tt> не может выяснять логику работы ваших функций, и поэтому первое упоминание символа, используемое в подстановке, должно содержать присваивание ему значения, пригодного для определения самой подстановки. Иными словами, вместе с <tt>Filter::AutoImport</tt> следующий код не проканает: <source lang="perl">my $self;$self = shift;</source>
== Зависимости ==
[[Категория:Perl]]
[[Категория:РазработкаАрхив]]