Path::Class::Dir-0.16のchildrenが「0」で止まる件

ブログにお絵かきなんてものが増えてたので喜び勇んで描いてみた。

って前からあったっけ?

タイトルまんまなんだけども、children呼ぶときの対象のディレクトリ以下に「0」って言う名前のファイル(もしくはディレクトリ)が存在してるとディレクトリ一覧が取れないのです。

コード見てみたら一目瞭然、IO::Dirのreadをwhileでぐーるぐるしてるわけですが、終了の判定を単なる真偽値で行っているため「0」というファイルがあっちゃうとそこで止まってしまうというわけです。こーゆー場合はちゃんとdefined関数使わないとね。

以下パッチ。

 --- Dir.pm      Fri Apr 17 18:23:50 2009
 +++ newDir.pm   Fri Apr 17 18:36:21 2009
 @@ -164,7 +164,7 @@
    my $dh = $self->open or Carp::croak( "Can't open directory $self: $!" );
 
    my @out;
 -  while (my $entry = $dh->read) {
 +  while (defined(my $entry = $dh->read)) {
      # XXX What's the right cross-platform way to do this?
      next if (!$opts{all} && ($entry eq '.' || $entry eq '..'));
      push @out, $self->file($entry);


さて産まれて初めてRTチケット発行してみました。

勝手が全然わからなかったのであたふたしながら何とかできましたよ。ふぅー。

超つたない自動翻訳ほぼそのまんまな英語ですが多分意図は伝わるんじゃないかと思われます。

それはそうと最近暑くなってきたのでチャリ通勤がきついっす。