kulls has asked for the wisdom of the Perl Monks concerning the following question:

Greeting,
%dir_file_counts = ( xbags => 416, apr => 28, apam => 1, asrs => 431, aast => 181, xpept => 8, xbank => 178, aprot => 28 ); print "\n Total Number of files \n\n"; foreach(keys %dir_file_counts) { print "\n \t $_ => ".$dir_file_counts{$_}; } __PRINT___ Total Number of files xbags => 416 apr => 28 apam => 1 asrs => 431 aast => 181 xpept => 8 xbank => 178 aprot => 28
Is there any way to show the data in a tabular format without using "\n\t"?.
How can i handle the alignments while displaying values ?
Is there any perl function that will sum all the values in a hash?

Thanx in advance
-kulls

Replies are listed 'Best First'.
Re: Add and print the values in a hash
by McDarren (Abbot) on Jan 31, 2006 at 09:20 UTC
    Is there any way to show the data in a tabular format without using "\n\t"?.
    Yes, you can use printf or format
    Is there any perl function that will sum all the values in a hash?
    Not that I am aware of, but it's quite trivial to do that by adding an extra line to your loop above, eg:
    $total_count += $dir_file_counts{$_};

    Update: And here is an example using printf

    #!/usr/bin/perl -w use strict; my %dir_file_counts = ( xbags => 416, apr => 28, apam => 1, asrs => 431, aast => 181, xpept => 8, xbank => 178, aprot => 28 ); my $total_count = 0; print "\n Total Number of files \n\n"; foreach(keys %dir_file_counts) { $total_count += $dir_file_counts{$_}; printf "%12s => %5s\n", $_, $dir_file_counts{$_}, } printf "%12s => %5s\n", "Grand Total", $total_count;

    Cheers,
    Darren :)

      TheDamian suggests in his book "Perl Best Practices" to use Perl6::Form instead of the old perl forms. I haven't used Perl6::Form yet, but don't like the old forms either.

      Best regards,
      perl -e "s>>*F>e=>y)\*martinF)stronat)=>print,print v8.8.8.32.11.32"

Re: Add and print the values in a hash
by xdg (Monsignor) on Jan 31, 2006 at 11:48 UTC

    You might want to try Data::Hash::Totals. As the author, Andy Lester said, in the synopsis, "This module is so butt simple, but I'm tired of redoing this code over and over again":

    my %fave_stooge_votes = ( Moe => 31, Larry => 15, Curly => 97, Shemp => 3, ); print as_table( \%fave_stooge_votes ); prints the following: 97 Curly 31 Moe 15 Larry 3 Shemp

    -xdg

    Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.