0

Perl6::Form を使用してテーブルを生成し、それをテキスト ファイルに出力しています。何をやってもWindowsの行末が出力できないようです。フォーマット文字列にlocal $OUTPUT_RECORD_SEPARATOR = "\r\n"; 追加しようとしました。\r\nサイコロはありません。

私のコード:

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;
4

1 に答える 1

6

ドキュメントによると、

File :: Tempによって返されるファイルは、そのようなモードが使用可能な場合、バイナリモードで開かれています。それが正しくない場合は、C関数を使用してファイルハンドルのモードを変更してください。

そのため、Windowsで開いたファイルハンドルに通常存在する:crlfを、開いた後、印刷する前に次を使用して再度追加します。

$fh->binmode(':crlf');
于 2013-02-08T22:06:06.107 に答える