Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re^3: assigning arrays as values to keys of hash

by AnomalousMonk (Chancellor)
on Sep 18, 2018 at 06:01 UTC ( #1222558=note: print w/replies, xml ) Need Help??


in reply to Re^2: assigning arrays as values to keys of hash
in thread assigning arrays as values to keys of hash

push-ing each "organ" to an autovivified anonymous array keyed by its "animal" allows preservation of the original order of "organs" as found in the file (if this is of any importance). If preserving original order isn't important, use the simpler two-level hash approach described by others.

c:\@Work\Perl\monks>perl -wMstrict -le "use autodie; no autodie qw(open close); ;; use List::MoreUtils qw(uniq); ;; use Data::Dump qw(dd); ;; my $file = qq{bird beak\n} . qq{bird beak\n} . qq{bird claw\n} . qq{bird wings\n} . qq{bird feathers\n} . qq{snake fangs\n} . qq{snake scales\n} . qq{snake fangs\n} . qq{snake tail\n} ; print qq{[[$file]]}; ;; open my $fh, '<', \$file or die qq{opening ram file: $!}; ;; my %hash; while (my $line = <$fh>) { my $parsed = my ($animal, $organ) = $line =~ m{ \A ([[:alpha:]]+) \s+ ([[:alpha:]]+) \Z }xmsg; ;; die qq{bad line '$line'} unless $parsed; ;; push @{ $hash{$animal} }, $organ; } ;; close $fh or die qq{closing ram file: $!}; ;; @$_ = uniq @$_ for values %hash; dd \%hash; " [[bird beak bird beak bird claw bird wings bird feathers snake fangs snake scales snake fangs snake tail ]] { bird => ["beak", "claw", "wings", "feathers"], snake => ["fangs", "scales", "tail"], }


Give a man a fish:  <%-{-{-{-<

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1222558]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (4)
As of 2019-07-17 22:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?