use Benchmark qw( cmpthese timethese ); use Storable qw( freeze thaw ); use Data::Denter qw( Indent Undent ); timethese( 2_000, { Data::Denter => \&DENTOR, Storable => \&STORKO }); print "\n\n\n"; cmpthese( 2_000, { Data::Denter => \&DENTOR, Storable => \&STORKO }); sub DENTOR { my $in = Indent \%BLARG; my %out = Undent $in; return(); } sub STORKO { my $in = freeze \%BLARG; my %out = %{ thaw($in)}; return(); } __END__ Benchmark: timing 2000 iterations of Data::Denter, Storable... Data::Denter: 12 wallclock secs (11.71 usr + 0.01 sys = 11.72 CPU) @ 170.69/s (n=2000) Storable: 6 wallclock secs ( 5.60 usr + 0.00 sys = 5.60 CPU) @ 357.27/s (n=2000) Benchmark: timing 2000 iterations of Data::Denter, Storable... Data::Denter: 12 wallclock secs (11.80 usr + 0.00 sys = 11.80 CPU) @ 169.53/s (n=2000) Storable: 6 wallclock secs ( 5.62 usr + 0.00 sys = 5.62 CPU) @ 356.06/s (n=2000) Rate Data::Denter Storable Data::Denter 170/s -- -52% Storable 356/s 110% --