Perlのeachには気をつけろ

perlのeachではまったので、メモを。

$ perl -v
This is perl, v5.8.5 built for i386-linux-thread-multi

サンプルソース
use strict;
use Data::Dumper;

use Test::More;

my $hash = +{ a => 1 };
#note explain $hash;
Data::Dumper->new( [$hash] )->Sortkeys(1)->Dump;
ok each %{ $hash };


結果
not ok 1

ちなみに、Sortkeys(0)をすると、okとなります。
同様にnote explain $hashでもnot okになります。
explain は内部的にData::Dumperを呼んでいるため。

そして、何が原因か探ろうとおもったのですが、
中身がData::Dumper::Dumpex(実物はxs)なので断念。

たぶん、eachでつかうitaratorがリセットされてないだけだと思いますが。。

こんな感じです。

use strict;

use Test::More;

my $hash = +{ a => 1 };
#note explain $hash;
#Data::Dumper->new( [$hash] )->Sortkeys(1)->Dump;
while (my $k = each %{ $hash } ) {
last
}
ok each %{ $hash };


ついついexplainしたくなりますが、気をつけます。

0 件のコメント:

コメントを投稿

ReactNativeでAndroid対応する話

前提 ReactNativeでiOS版のアプリをリリースしていて、Android版をリリースする話 トラブルシューティング Build.VERSION_CODES.Q が存在しないエラー compileSdkVersionを29以上にすると解決 メモリー足りないエラー Execu...