Perl 使用TTerse语法分配内部Text::Xslate模板

Perl 使用TTerse语法分配内部Text::Xslate模板,perl,templates,Perl,Templates,当我使用Text::Xslate模板引擎并收集将在Perl脚本中提供给模板的数据时,一切正常,正如预期的那样: my %vars = ( some => { nested => { thing => 'foobar', }, }, ); # template.tx contains [% some.nested.thing %] my $content = $tx->render('template

当我使用Text::Xslate模板引擎并收集将在Perl脚本中提供给模板的数据时,一切正常,正如预期的那样:

my %vars = (
    some => {
        nested => {
            thing => 'foobar',
        },
    },
);

# template.tx contains [% some.nested.thing %]
my $content = $tx->render('template.tx', \%vars);
正如所料,
[%some.nested.thing%]
被“foobar”取代。 如果我以这种方式在模板内分配:

[%some\u nested\u thing='foobar%]

一切都很好。 但是,当我尝试以这种方式分配时:

[%some.nested.thing='foobar%]

它将失败,并显示以下消息:
Text::Xslate::Compiler:Cannot modify.,它不是词法变量

那么,在Text::Xslate中是否可以像这样分配内部模板


值得注意的是,仍然可以在Text::Xslate模板内创建多维哈希:

[% some = {
    nested => {
        thing   => 'foobar',
    }
} %]
然后可以引用其中的元素,比如
[%some.nested.thing%]

只讨论创建和分配新变量,而不是现有变量。它甚至不鼓励使用该功能

集合和赋值,尽管它们的使用非常困难 气馁

[% SET var1 = expr1, var2 = expr2 %]
[% var = expr %]
只讨论创建和分配新变量,而不是现有变量。它甚至不鼓励使用该功能

集合和赋值,尽管它们的使用非常困难 气馁

[% SET var1 = expr1, var2 = expr2 %]
[% var = expr %]

不,这是不可能的,如果你阅读手册中的链接,你就会明白为什么这是一个明确的设计目标。将数据从视图传递回控制器应该是一个很大的禁忌。您可以通过定义一个自定义函数来解决这个问题,您可以使用该函数从模板调用Perl,但如果您真的想进行这样的黑客攻击,请务必三思而后行。

不,这是不可能的,如果您阅读到的手册链接,您将了解为什么这是一个明确的设计目标。将数据从视图传递回控制器应该是一个很大的禁忌。您可以通过定义一个自定义函数来解决这个问题,您可以使用该函数从模板回调Perl,但如果您真的想要这样的破解,请三思