sub package_size_report {
my $package = shift ;
eval('require B::TerseSize') ;
if ( $@ ) { return "You need to have installed B::TerseSize (from B:
+:Size) to use &package_size!" ;}
my $output ;
$output .= "Memory Usage for package $package\n\n" ;
my($subs, $opcount, $opsize) = B::TerseSize::package_size($package);
$output .= "Totals: $opsize bytes | $opcount OPs\n\n" ;
my($clen, $slen, $nlen);
my @keys = map { $nlen = length > $nlen ? length : $nlen; $_; }
( sort { $subs->{$b}->{size} <=> $subs->{$a}->{size}
+} keys %$subs );
$clen = length $subs->{$keys[0]}->{count} ;
$slen = length $subs->{$keys[0]}->{size} ;
for my $name (@keys) {
my $stats = $subs->{$name};
if ($name =~ /^my /) {
$output .= sprintf("%-${nlen}s %${slen}d bytes\n", $name, $stats
+->{size}) ;
}
else {
$output .= sprintf("%-${nlen}s %${slen}d bytes | %${clen}d OPs\n
+", $name, $stats->{size}, $stats->{count} ) ;
}
}
return $output ;
}
|