Template Toolkit: Модули: Template::Stash::Context

Template Toolkit

(русская редакция)

[ Пособия ] [ Руководство ] [ Модули ] [ Библиотеки ] [ Утилиты ] [ Вопросы ] [ Релиз ] [ Perl-ресурсы ] Форум ]
 
Поиск
Template Toolkit | Модули | Template::Stash::Context

Template::Stash::Context

[ ◄ Template::Stash ] [ Template::Stash::XS ► ]
Экспериментальный модуль хранилища (stash), позволяющий определять списковый и скалярный контексты.

Оглавление

ОБЗОР

Индекс ] [ Модули ] [ Наверх ]

    use Template;
    use Template::Stash::Context;
    my $stash = Template::Stash::Context->new(\%vars);
    my $tt2   = Template->new({ STASH => $stash });

ОПИСАНИЕ

Индекс ] [ Модули ] [ Наверх ]

Это альтернативный объект хранилища (stash), который включает патч от Крейга Барретта (Craig Barratt), который реализует новые виртуальные методы, позволяющие точечным переменным шаблона указать в каком контексте - скалярном или списковом - должны вызываться функции и методы объектов. Он немного перегружает каждый вызов хранилища и я отношусь настороженно к накладыванию этого патча на версию модуля ядра без предварительного исследования возможных эффектов. Таким образом, сейчас он реализован как отдельный модуль хранилища, что позволяет нам оттестировать его, замерить его производительность и включать/выключать его по мере надобности.

Вот что Крейг говорит об этом:

Это более хороший набор возможностей для ядра. Во вложении новая версия Stash.pm (на базе версии TT 2.02), которая:

• поддерживает специальный виртуальный метод "scalar", который принудительно вызывает функцию в скалярном контексте, например:

    cgi.param("foo").scalar

вызывает cgi.param("foo") в скалярном контексте. По умолчанию вызов происходит в списочном контексте.

Если операнд не является функцией, scalar ведет себя как аналог в perl (то есть: для скаляров ничего не выполняет, для массивов возвращает размер, и т.д.).

• поддерживает специальный виртуальный метод "ref", который ведет себя аналогично функции ref в perl. Если он применяется к функции, то функция не вызывается. Например:

    cgi.param("foo").ref

не вызывает cgi.param, а возвращает "CODE". Аналогично, HASH.ref, ARRAY.ref возвращает, то что и следует ожидать.

• содержит новый скалярный и списочный виртуальный метод, называемый "array", который оставляет массивы без изменений, а скаляры преобразует в одноэлементные массивы.

• позволяет применять скалярные виртуальные методы к массивами и хешам поэлементно, например: ARRAY.repeat(3) повторяет каждый из элементов массива.

• позволяет применять списковые виртуальные методы к скалярам через преобразование скаляров в одно-элементные массивы (как при явном использовании "array"). Таким образом, становится возможным выполнять такие операции как SCALAR.size, SCALAR.join и получать полезные результаты.

Это также означает, что теперь можно безопасно использовать x.0, чтобы получить первый элемент, вне зависимости от того является x массивом или скаляром.

Новый Stash.pm прошел набор тестов для TT 2.02. Но я особо не тестировал новые возможности. Одна основная проблема реализации заключается в том, что виртуальные методы "scalar" и "ref" имеют более высокий приоритет по сравнению с именами переменных, определенных пользователем.

АВТОР

Индекс ] [ Модули ] [ Наверх ]

Энди Уардли (Andy Wardley <abw@andywardley.com>)

http://www.andywardley.com/

ВЕРСИЯ

Индекс ] [ Модули ] [ Наверх ]

1.59, поставляется в составе Template Toolkit версии 2.14, дата релиза - 4 октября 2004.

АВТОРСКИЕ ПРАВА

Индекс ] [ Модули ] [ Наверх ]

  Copyright (C) 1996-2004 Andy Wardley.  All Rights Reserved.
  Copyright (C) 1998-2002 Canon Research Centre Europe Ltd.

Этот модуль является свободно-распространяемым программным обеспечением; вы можете распространять и/или модифицировать его на тех же условиях, что и Perl.

СМОТРИ ТАКЖЕ

Индекс ] [ Модули ] [ Наверх ]