パルカワ2

最近はFlutterをやっています

Data::DumperとB::Deparseを合わせて使ってみる。

この記事は、 Perl Advent Calendar 2014の11日目の記事です。
前日は、mihyaeru21さんのPerlでベンチマークでした。

B::Deparseの紹介

B::DeparseというのがPerlにあります。
ゴチャゴチャしたコードをいい感じにして見たいよ〜って時便利です。

use strict;
use warnings;

print +('`'^'(').('`'|'%').('`'|',').('`'|',').('`'|'/').' '.('['^',').('`'|'/').('['^')').('`'|',').('`'|'$').'!';

こういうコードがあったとします。それをperl -MO=Deparse ...で実行するだけです。

$ perl -MO=Deparse test.pl
use warnings;
use strict;
print 'Hello world!';
test.pl syntax OK

なにこれすごい!!!!!!!!!!!!

Data::Dumperと使う

でもまあ、こんな意味不明なコードを仕事で見ることがない。これで終わるのも忍びない。どうしたもんかねーとPerl Advent Calendar 2014眺めてたら、パピックスが良い記事を書いてた。

DDPでdeparseを使う例がある。Data::Dumperはないじゃん!これだ!
通常、Data::Dumperにsubを渡すとこうなる。

use strict;
use warnings;
use Data::Dumper;

my $code = sub {
    print "Hello, World";
};

print Dumper $code;
__END__
$VAR1 = sub { "DUMMY" };

DUMMY!!!!!!!!!!!!!!!!!!わかりにくい!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
というわけで見るぞ!!!!!!!

use strict;
use warnings;
use Data::Dumper;

$Data::Dumper::Deparse = 1; # 追加だ!

my $code = sub {
    print "Hello, World";
};

print Dumper $code;
__END__
$VAR1 = sub {
            use warnings;
            use strict;
            print 'Hello, World';
        };

見れた!!!!!!!!!!!!!シュッ!!!!!!!!!!!!!!!!!!!!!としている!!!!!!!!!!!!!!!!!

まとめ

Data::DumperもB::Deparseを合わせて使える。

明日

明日は、zoncoenさんです。楽しみですね!