我正在使用模板工具包。我正在编写 tt2 编程,但如果我使用空格缩进,它也会反映在输出中。有什么方法可以不反映在输出中
[% FOREACH md IN data.keys.sort -%]
[% FOREACH timeplate IN data.$md.keys.sort -%]
[% IF (timeplate == 'timeplate') -%]
[% FOREACH tp IN data.$md.$timeplate.keys.sort -%]
[% FOREACH proc IN data.$md.$timeplate.$tp.procedure -%]
[% procedure.$proc = tp -%]
[% END -%]
[% END -%]
[% END -%]
[% END -%]
[% END -%]
Template Toolkit 中的默认分隔符是
[%
和 %]
。带有连字符 [%-
和 -%]
的替代版本会“吃掉”第一个换行符之前的空格。试试这个代码:
use Template;
my $tt = Template->new;
my $input = <<'EOF';
top
[%- IF 1 -%]
text
[%- END -%]
bottom
EOF
$tt->process(\$input);
输出一行:
top textbottom
尝试不同的分隔符,并尝试插入空行以了解效果。
如果您绝对必须删除文字文本之前或之后的空格,您可以使用一个技巧,将其分配给变量并输出该变量,或者将其转换为字符串文字:
use Template;
my $tt = Template->new;
my $input = <<'EOF';
[%- variable = 'bar' -%]
[%- 'foo' -%]
[%- variable -%]
EOF
$tt->process(\$input);
输出是字符串“foobar”,没有任何换行符。
可悲的事实是Template Toolkit 的空白处理能力非常有限。不仅具有带有连字符的分隔符版本,而且具有不同行为的其他分隔符版本(例如
[%=
或 [%|
)确实很有帮助,但如果不破坏与现有版本的严格兼容性,就无法实现。
顺便说一句,您在自己的代码中使用
-%]
,可能没有注意到它。