Category: Memory usage
Author/Contact Info Graciliano M. P. <gm@virtuasites.com.br>
Description: This function, based in Apache::Status, make an package memory report. Thanks to B::Size too!
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 ;
}