Perl 使用TTerse语法分配内部Text::Xslate模板
当我使用Text::Xslate模板引擎并收集将在Perl脚本中提供给模板的数据时,一切正常,正如预期的那样: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
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,但如果您真的想要这样的破解,请三思