我使用TT(perl模板工具包)获得额外的CR

ger*_*ard 5 perl template-toolkit

我使用perl v5.10(在Windows 7上)+ TT v2.22.当我使用TT时,对于每个源代码行,我都会在生成的html中获得额外的内容CR:

源文本(Windows格式):

"Some_html" CR LF  
Run Code Online (Sandbox Code Playgroud)

输出文字:

"Some_html" CR  
CR LF
Run Code Online (Sandbox Code Playgroud)

但是,当我将源文件转换为unix格式,然后运行TT时,我得到:
源文本(unix格式):

"Some_html" LF   
Run Code Online (Sandbox Code Playgroud)

输出文字:

"Some_html" CR LF
Run Code Online (Sandbox Code Playgroud)

(我使用notepad ++来显示CR和LF字符;也可以在源模板中更改unix < - > windows格式).

当我解决这个问题时,我得到了一些(少数)^M关于Windows上额外的帖子,但是我找不到关于根本原因的解释也没有真正的解决方案(只是一些解决方法如何摆脱额外的^M).

虽然不是一个真正的问题,但我发现它非常"不干净".
是否有一些我应该打开的配置(我查看了www.template-toolkit.org/docs/manual/Config.html但找不到任何内容)?
其他解决方案?(除了修复输出文件之外).
谢谢

bvr*_*bvr 11

Template Toolkit以二进制模式读取模板的源文件,但以文本模式写入.来自模板的数据(包含CR LF)在文本模式的输出期间被转换,因此LF变为CR LF.

解决此问题的最简单方法是以二进制模式写入文件(请注意rawopen调用的修饰符):

my $tt = Template->new;
my $output_file = 'some_file.txt';
open my $out_fh, '>:raw', $output_file    or die "$output_file: $!\n";
$tt->process('template', \%data, $out_fh) or die $tt->error();
Run Code Online (Sandbox Code Playgroud)