perl - 如何将 undef 作为参数从 TT 模板传递给对象方法?

标签 perl template-toolkit

Template-Toolkit似乎总是想将 undef 插入空字符串。所以像这样的模板:

Result is [% some_object.some_method (1, undef, 2) %]

或者这个:

Result is [% ttvar %]
          [% some_object.some_method (1, ttvar, 2) %]

产生对 Perl 的调用,例如:

some_object->some_method (1, '', 2)

当我想要的是:

some_object->some_method (1, undef, 2)

有什么方法可以传递 undef 而不是空字符串?

最佳答案

我添加了另一个答案来展示 EVAL_PERL 如何在 TT 中工作的示例:

use Template;
use DateTime;

my $tt = Template->new( EVAL_PERL => 1 );

my $vars = { foo => 'DateTime', bar => DateTime->now, p => 'print' };

my $file = q{
    [% SET hello = 'Hello world' %]
    [% PERL %]
    print "[% hello %]\n";
    print [% foo %]->now, "\n";
    [% p %] $stash->get( 'bar' )->ymd;
    [% END %]
};

$tt->process( \$file, $vars );

以上输出如下:

Hello world
2009-11-03T15:31:50
2009-11-03

因为 TT 充当预处理器并生成以下 Perl 代码来解释:

print "hello world\n";
print DateTime->now, "\n";
print $stash->get( 'bar' )->ymd;

注意。上一行中的 $stash 由 TT 提供,是对顶级 stash 对象的引用。

/I3az/

关于perl - 如何将 undef 作为参数从 TT 模板传递给对象方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1667553/

相关文章:

perl - 为什么在 mod_perl 中加载我的 Perl 模块会导致 Apache 挂起?

perl - 简单: How do doubles work in Perl?

perl - 在没有插件的模板工具包中调用外部子和模块?

perl - Template Toolkit 中默认转义 HTML

perl - 模板工具包:从命令行将数组变量传递到 tpage 中?

perl - Catalyst 中的调试屏幕更简洁?

windows - perlbrew 可以在 Windows 上运行吗?

regex - Perl 中为什么需要括号来保存正则表达式的结果?

perl - YAML 错误 : Inconsistent indentation level

Perl、模板工具包和 SEO