unread()のバグ
:scalar
:scalarのunread()のバグについて,perlbugにレポートを送った。しかし添付ファイルを付け忘れた。
バグレポートは大分送り慣れてきたが,いつもファイルを添付するのを忘れてしまう。今回は,いつも添付し忘れるから本文にもファイル名を書いておこう,とまで思ったのにそれでも忘れた。これはひどい。
:crlf
Win32のデフォルトレイヤである:crlfのunread()もバグっている*1。PerlIOCrlf_unread()が,LFだけが押し戻された場合でもCRとLFをバッファに押し戻すからのようだ。この振る舞いが正しいのかどうかは分からないが,結果的にはバッファがおかしくなることがあるので,バグだと考えられる。しかし,どうすれば「直った」といえるのかがよく分からないので,直しようがない。
この問題そのものは全てのプラットフォームで再現する。
#!perl -w use 5.008_001; use strict; use Test::More 'no_plan'; use IO::Handle; use File::Spec; # :perlioにすると一応テストは通る ok open(my $io, '<:crlf', File::Spec->devnull), 'open'; my $n = 5000; for my $i(1 .. $n){ $io->ungetc(ord "\n"); } diag 'tell($io) = ', tell($io); is_deeply [<$io>], [("\n") x $n], 'readline';
*1:そのせいでIO::Handle::unreadのテストがWin32で失敗する。