http://www.perlmonks.org?node_id=274493


in reply to parse hash to sub

Fixed the code

%new_db = (1 , 'gedit-2.2.2-i386-1.tgz', 2 , 'ppp-3.4.1-i386-2.tgz'); new_packages($fcount,\%new_db); sub new_packages { my %packages =%{ $_[1]}; print "Found $_[0] packages for download: $_\n" if ($fcount > 1); print "Found $_[0] package for download: $_\n" if ($fcount == 1); print "Which one would you like to install?:\n"; foreach my $key (keys (%packages)) { print "$key) $packages{$key} \n" } }

Note that I changed your passing of the hash to passing of a reference to the hash and I de-reference it in the sub.

Otherwise it is just going to look like an array of scalars.


Peter L. BergholdBrewer of Belgian Ales
Peter@Berghold.Netwww.berghold.net
Unix Professional

Replies are listed 'Best First'.
Re: Re: parse hash to sub
by hmerrill (Friar) on Jul 15, 2003 at 19:33 UTC
    Just for the sake of completeness, I'll offer one more option - instead of dereferencing the hash reference passed in to new_packages, back into hash %packages, you could just accept the hash reference and use that to refer to your hash elements, like:
    sub new_packages { my $fcount = shift; # use shift instead of $_[0] my $packages_ref = shift; # use shift instead of $_[1] print "Found $fcount packages for download: $_\n" if $fcount > 1); print "Found $fcount package for download: $_\n" if $fcount == 1); print "Which one would you like to install?:\n"; foreach my $key (keys %{$packages_ref}) { print "$key) $packages_ref->{$key} \n"; } }
    Of course this code is completely untested, as your code probably was since I saw one or two problems with it.

    HTH.