1

ファイルを配列に読み込む perl スクリプトを作成しています。Perl 5.16 を使用して Windows でプログラムを作成しました (5.14 でも動作します)。Mac で Perl 5.12 を使用すると、スクリプトが失敗しました。

失敗した部分は次のとおりmy @array = <$file>です。Mac では、配列は正しいサイズ (ファイルの行数と同じ) に戻りましたが、最後の要素を除くすべての要素が空でした。代わりにこれに切り替えると、コードは正しく機能しました。

my @array;
while(<$file>){
    push @array, $_;
}

行末を(Windowsスタイル)LFの代わりに切り替えた場合に違いがあったかどうかはわかりません。CRLF問題は解決しましたが、私は戸惑いました。リストした 2 つのコード スニペットはまったく同じものだと思いました。ここで異なる結果を生み出すそれらの違いは何ですか?

4

1 に答える 1

1

答えは、ご想像のとおり、2 つの方法はまったく同じであるということです。例:

my $start = tell DATA; #store beginning filehandle position

my @array1 = <DATA>;

seek DATA,$start,0; #reset filehandle position

my @array2;
while(<DATA>){
    push @array2,$_;
}

print "List assignment:\n @array1\n";
print "Looping through:\n @array2\n";

__DATA__
1
2
foo
bar

あなたの以前の失敗はおそらく別のものでした。おそらく、Mac 上の Perl または Mac のファイル IO に関する何らかの問題が関係していた可能性がありますが、それはコードの他の部分である可能性が高いです (これは個人的なことではありません: 私自身のコードについても同じ仮定をします)。

于 2012-08-17T17:25:47.983 に答える