2013-02-08 30 views
0

我使用Perl6 :: Form來生成表格並將其輸出到文本文件。無論我做什麼,看起來,我都無法輸出Windows行尾。我試過local $OUTPUT_RECORD_SEPARATOR = "\r\n";我試過把\r\n添加到我的格式字符串中。沒有骰子。在Perl6中使用Windows行結尾::表格

我的代碼:

use English; 

local $OUTPUT_RECORD_SEPARATOR = qq{\r\n}; 

my @column_headings = @{ shift $args->{'data'} }; 
my @rows   = @{ $args->{'data'} }; 

my $header_format = join q{|}, (q/{]]]][[[[}/) x scalar @column_headings; 
my $field_format = join q{|}, (q/{]]]]]]]]}/) x scalar @column_headings; 

# formatting starts with headers followed by double line 
my @format_data = ($header_format, @column_headings,); 
push @format_data, join q{|}, (q/==========/) x scalar @column_headings; 
foreach my $row (@rows) { 
    push @format_data, ($field_format, @{$row}); 
} 
my $text = form @format_data; 

my ($fh, $tempfile) = File::Temp::tempfile; 
$fh->print($text) or croak(qq/Failed to write to tempfile: $OS_ERROR/); 
close $fh; 
+0

['use English'](http://search.cpan.org/~dom/perl-5.12.5/pod/perlvar.pod#Predefined_Names)?否則,你只能通過'$ \\'來訪問輸出分隔符。 – mob 2013-02-08 22:04:30

+0

另外,變量名是'$ OUTPUT_RECORD_SEPARATOR'。 – mob 2013-02-08 22:08:35

+0

@mob是的,我正在使用'English'和'$ OUTPUT_RECORD_SEPARATOR'。將改正帖子。 – 2013-02-08 22:44:32

回答

6

按照docs

按文件::溫度返回的文件將在二進制模式 被打開,如果這樣的模式可用。如果不正確,請使用C 函數更改文件句柄的模式。

因此,重新添加:在Windows打開的文件句柄上通常存在的文件句柄:在打開之後但在打印之前,使用以下命令打開文件句柄。

$fh->binmode(':crlf'); 
+0

是的,讓IO系統處理它。如果您使用的是Perl的Windows版本,則會自動發生。但使用這將使所有系統輸出CRLF。 – ikegami 2013-02-08 22:22:18

+0

@ikegami這是一個Perl的Windows版本,但是當我在記事本中查看我的文本文件時,一切都在一行上。 – 2013-02-08 22:34:10

+0

@cjm:那就是訣竅! – 2013-02-08 22:50:46