sdslrn123 has asked for the wisdom of the Perl Monks concerning the following question:
print "$member can be found " . scalar(@{$family{$member}}) / ? . ": "
Thank You. Genius. Some heavy PERLDOC reading tonight!! Updated. Sorry about confusion with variable names. Basically my data is subject to change but will follow a format as follows where I will have a unique "Family Name" followed by "--" followed by various "family members". The contents of the data are unknown to me apart from the format. Data is a text file. Could consist of as follows:#!/usr/bin/perl use Data::Dumper; # only for teaching purpose $Data::Dumper::Indent = 1; # dito :-) while(<DATA>) { chop; my($familyname,$memberstring) = split /\s--\s/,$_; my @members = split /, /,$memberstring; # tell each member that it's got a new family foreach my $member(@members) { push(@{$family{$member}},$familyname); } } print Dumper(\%family); # show the data structure in %family # now output a list of members with their families foreach my $member(sort keys %family) { print "$member can be found " . scalar(@{$family{$member}}) . ": " . join(" ", @{$family{$member}}) . "\n"; }
I know I can grab this into an array called @Dopli. And split each line $unix at "--" into an array @trainer Is there a way of pushing each array into a hash using $trainer[0] and $trainer1.FLINTSTONES=BARNEY, FRED, WILMA JETSONS=MAX, TONY, WILMA SIMPSONS=LISA, BARNEY, WILMA, HOMER ALCATRAZ=ELIJAH, MAX, WILMA
Ultimately I am looking to print:sub nice_list { return '' if @_ == 0; return shift if @_ == 1; my $last = pop; return join(', ', @_) . " and $last"; } my $line; my @data; my @family; my @members; foreach $line (@data){ @family = split ('=', $line); @members = split (',', $family[1]); my %is_eaten_by = ( $family[0] => [ (@members) ], ); foreach my $fruit (keys %is_eaten_by) { my $eaters = $is_eaten_by{$fruit}; my $num_eaters = @$eaters; print("$num_eaters ${fruit}: ", (@$eaters), "\n"); } }
At the moment am just getting what seems the number of terms of each array related to the key. Thanks for any kind of help or advice.BARNEY can be found 2: FLINTSTONES SIMPSONS FRED can be found 1: FLINTSTONES WILMA can be found 4: FLINTSTONES JETSONS SIMPSONS ALCATRAZ MAX can be found 2: JETSONS ALCATRAZ and so forth...
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Counting/Matching Terms In Arrays contained within a Hash
by shmem (Chancellor) on Jun 21, 2006 at 14:29 UTC | |
|
Re: Counting/Matching Terms In Arrays contained within a Hash
by Jaap (Curate) on Jun 21, 2006 at 14:08 UTC |