.:Публикации:. [www.karlson.ru]


Вперед: Условные операторы Вверх: Приложение А. Синтаксис внутреннего Назад: Работа с переменными из   Содержание

Оформление динамических модулей в языке Perl

Динамический модуль является методом класса modules.pm. Атрибуты модуля перечисляются после его открытия. Синтаксис такой:
# имя_атрибута значение1, значение2, ..., значениеn
Если атрибут является аддитивным, его имя может быть повторено несколько раз, если нет -- в качестве значения атрибута берется последнее его вхождение. В атрибуте child перечисляются все безусловно вызываемые модули, в child-if -- которые могут быть вызваны, child-for -- которые вызываются в цикле, при этом последнее значение -- комментарий. Атрибут comment (аддитивный) содержит строку, которая описывает функциональность модуля. Атрибут slot описывает слоты, используемые в данном модуле. последнее значение -- строка-комментарий к слотам. Атрибут tag описывает вспомогательный HTML-фрагмент, который присваивается аргументу. Первое значение -- имя тэга, второе -- номер аргумента, которому он присваивается (см. далее пример для if). Результатом работы динамического модуля должен быть HTML-фрагмент. Стандартными методами являются slot и var. Аргументам является имя переменной. Для var можно указать два аргумента, тогда оператор выполняет присваивание переменной значения второго аргумента. Если указать атрибут manual, система не будет вычислять слоты (и аргументы) модуля (тем не менее, компилятор подготовит псевдокод, который их вычисляет). Тогда сам модуль может определить, какие слоты следует вычислять, а какие -- нет. Вычисление слота осуществляется автоматически оператором slot (разумеется, только один раз). Упорядоченные аргументы должны в этом случае считываться как слоты. Во всех остальных случаях упорядоченные аргументы передаются как упорядоченные фактические параметры в вызове функции. Для того чтобы вызвать модуль, нужно создать объект класса module. В конструкторе указывается имя модуля. Метод view класса module вызывает этот модуль. Если первый аргумент -- хеш, в нем содержатся пары слот-значение, остальные аргументы являются порядковыми аргументами модуля. Пример:
sub internet_contents {
# comment Содержание электронного журнала "Интернет"
# slot id "Номер выпуска"
# child-for internet-contents-article "Элемент содержания

my $self=shift;
my $db=$self->getdb();
my $id=$self->slot('id');
my $result='';
my $cursor=$db->prepare("select title, summary, author
from article where number=$id");
my $t = new module('internet-contents-article');
while (my $h=$cursor->fetchrow_hashref()) {
	$result.=$t->view($h);
}
$cursor->fninish();
return $result;
}


...домик на крыше...,поиск,гостевая книга,cv. Be free, use Linux!