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