つれづれ日記
Perlカテゴリ 10/10
Perl のStorableがRecursionエラーを出すようになった。 階層が深いオブジェクトをシリアライズ (freeze)するときに関数を再帰呼び出しするため、スタックメモリを使い切る (stack over flow)らしい。今回はリスト型のオブジェクトポインタが18,700ほど連鎖したときにRecursionエラーになった。ポインタの連鎖が数段程度なら問題なく、配列に並べたオブジェクトは数万あっても問題ないらしい。25 MB ほどあったStorableのファイルの大きさは関係なかった。

とりあえずリスト型ポインタは保存せず、配列で保存したデータからロード後に作るようにした。

参考: Data::TreeDumper は深さを指定してオブジェクトを表示でき、UTF-8文字列も表示できて便利だった。

Perlカテゴリ 10/10