クロージャにバインドされた値を見たい時

Moose/Mouseのmethod modifiersのようにクロージャを多用するプログラミングをしていると、バインドしている変数の中身も含めてDeparseしたいことがよくあります。
そういうケースでは、Data::Dump::Streamerが使えます。

#!perl -w
use strict;
use feature qw(say);
use Data::Dump::Streamer qw(Dump);

sub make_counter {
    my $i = shift || 0;
    return sub { $i++ };
}

my $x = make_counter();
my $y = make_counter(10);

say "# x-1:";
Dump $x;
say "# y-1:";
Dump $y;

$x->();
$y->();
say "# x-2:";
Dump $x;
say "# y-2:";
Dump $y;
__END__

結果:

# x-1:
my ($i);
$i = 0;
$CODE1 = sub {
           use strict 'refs';
           BEGIN {
             $^H{'feature_say'} = q(1);
           }
           $i++;
         };
# y-1:
my ($i);
$i = 10;
$CODE1 = sub {
           use strict 'refs';
           BEGIN {
             $^H{'feature_say'} = q(1);
           }
           $i++;
         };
# x-2:
my ($i);
$i = 1;
$CODE1 = sub {
           use strict 'refs';
           BEGIN {
             $^H{'feature_say'} = q(1);
           }
           $i++;
         };
# y-2:
my ($i);
$i = 11;
$CODE1 = sub {
           use strict 'refs';
           BEGIN {
             $^H{'feature_say'} = q(1);
           }
           $i++;
         };

実行に影響を与えるプラグマが少し邪魔ですが、無事バインドした変数の中身ごと出力されました。
なお、このモジュールにはPerlの内部構造に依存したコードが大量に含まれるため、最新のPerlでは動かなかったりします。しかし、デバッグに使うなら問題ないことも多いです。今回はテストが一部通らなかったのでcpanm -nで入れました。