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 ; }