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

Template Toolkit

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

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


[ ◄ Template::Service ] [ Template::Stash::Context ► ]
Magical storage for template variables



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

    use Template::Stash;
    my $stash = Template::Stash->new(\%vars);
    # получить значения переменных
    $value = $stash->get($variable);
    $value = $stash->get(\@compound);
    # установить значения переменных
    $stash->set($variable, $value);
    $stash->set(\@compound, $value);
    # значения переменных по умолчанию
    $stash->set($variable, $value, 1);
    $stash->set(\@compound, $value, 1);
    # массовая установка переменных
    # методы (де-)локализации переменных
    $stash = $stash->clone(\%new_vars);
    $stash = $stash->declone();


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

Модуль Template::Stash определяет объектный класс используемый для хранения значений переменных для использования во время работы процессора шаблонов. Значения переменных хранятся во внутреннем хеше (который в свою очередь связывается с создаваемым объектом) и доступны через методы get() и set().

Переменные могут ссылаться на хеши, массивы, функции и объекты, равно как содержать простые значения. Хранилище (stash) автоматически выполняет нужные действия при работе с переменными, вызывает код или метод объекта, находит элемент массива или хеша и т.д.

Хранилище (stash) имеет методы clone() и declone(), которые используются процессором шаблонов для создания временных копий хранилища для локализации изменений, вносимых в переменные.


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


Конструктор new() создаёт и возвращает ссылку на новый объект Template::Stash.

    my $stash = Template::Stash->new();

Конструктору можно передать ссылку на хеш, содержащий переменные и значения для инициализации хранилища (stash).

    my $stash = Template::Stash->new({
        var1 => 'value1',
        var2 => 'value2' });


Метод get() возвращает переменную, имя которой указано в качестве первого аргумента.

    $value = $stash->get('var1');

Переменные, содержащие точки, можно получить, задав элементы переменной в виде ссылки на массив. Под каждый узел переменной отводится два элемента массива. Первый содержит имя элемента переменной, второй - ссылку на массив аргументов для этого элемента или 0, если аргументов нет.

    [% foo.bar(10).baz(20) %]
    $stash->get([ 'foo', 0, 'bar', [ 10 ], 'baz', [ 20 ] ]);

set($variable, $value, $default)

The set() method sets the variable name in the first parameter to the value specified in the second.

    $stash->set('var1', 'value1');

If the third parameter evaluates to a true value, the variable is set only if it did not have a true value before.

    $stash->set('var2', 'default_value', 1);

Dotted compound variables may be specified as per get() above.

    [% foo.bar = 30 %]
    $stash->set([ 'foo', 0, 'bar', 0 ], 30);

The magical variable 'IMPORT' can be specified whose corresponding value should be a hash reference. The contents of the hash array are copied (i.e. imported) into the current namespace.

    # foo.bar = baz, foo.wiz = waz
    $stash->set('foo', { 'bar' => 'baz', 'wiz' => 'waz' });
    # import 'foo' into main namespace: foo = baz, wiz = waz
    $stash->set('IMPORT', $stash->get('foo'));


The clone() method creates and returns a new Template::Stash object which represents a localised copy of the parent stash. Variables can be freely updated in the cloned stash and when declone() is called, the original stash is returned with all its members intact and in the same state as they were before clone() was called.

For convenience, a hash of parameters may be passed into clone() which is used to update any simple variable (i.e. those that don't contain any namespace elements like 'foo' and 'bar' but not 'foo.bar') variables while cloning the stash. For adding and updating complex variables, the set() method should be used after calling clone(). This will correctly resolve and/or create any necessary namespace hashes.

A cloned stash maintains a reference to the stash that it was copied from in its '_PARENT' member.


The declone() method returns the '_PARENT' reference and can be used to restore the state of a stash as described above.


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

Andy Wardley <abw@andywardley.com>



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

2.86, distributed as part of the Template Toolkit version 2.14, released on 04 October 2004.


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

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

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


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