複雑なデータ構造はData::Visitor::Callbackで簡単一発変換

ハッシュと配列の参照が入り交じったような複雑なデータ構造の、全value を均等に加工したかったので次の様にしてみました。

(中略)

すでに似たモジュールがある気が激しくしています!

ご存知でしたらぜひ教えてくださいませ。

[perl] 複雑なデータ構造のvalue を一気に書き換える方法 - harupiyoの日記


ということでData::Visitor::Callbackがズバリそれにあたるものじゃないかなーと。

use strict;
use warnings;
use Data::Dumper;
use Data::Visitor::Callback;

my $rh_testdata = {
    'a' => 1,
    'b' => {
        'aa' => 1,
        'ab' => [ 1, 2, 3, \ 'test', 5 ],
        'ac' => 3,
    },
    'c' => 3,
    'd' => 4,
    'e' => 5,
};

my $v = Data::Visitor::Callback->new(
    scalar      => sub {}, # スカラリファレンスを無視するために指定
    plain_value => sub {
         $_ = 'cooked' . $_; 
    }
);

$v->visit( $rh_testdata );

print Dumper $rh_testdata;


こんな感じで同じ結果になると思います。

このモジュールはオプションが豊富なので配列のリファレンスだけ変換かけるとか色々できるので便利かとー。

ちなみにCatalystでも使用されている安心と実績のあるモジュールです。