IO::Zlib->getline
「行」で読み取ります。行は、行の終わりで終わる一連のデータとして定義されます。Perl の「\n」は、オペレーティング システムによって異なります。Unix (Solaris および OS X を含む) では、これは 012 (改行文字) です。Windows では、これは 015 012 (キャリッジ リターン + 改行) です。
ファイルに Unix の改行IO::Zlib->getline
がある場合、Windows で実行すると Windows の改行が検索されます。ファイル全体をメモリに読み込もうとします。$/
通常は、「入力レコードセパレーター」別名「行末」を に設定することでこれを修正できます\015\012
が、IO::Zlib ( Compress::Zlib$/
経由) は下位互換性の理由からサポートしていません。
幸いなことに、この混乱はすべて IO::Compress および IO::Uncompress として書き直されました。IO::Uncompress::Gunzipを使用すると、 Compress::Zlib を提供するものとして既にインストールされているはずです...
use IO::Uncompress::Gunzip;
# A block to isolate the local $/
{
my $fh = IO::Uncompress::Gunzip->new($file);
# the file being read has Unix newlines
local $/ = "\012";
# As an added bonus, the object works as a filehandle.
while(my $line = <$fh>) {
...
}
}