in reply to Calculating Total Different Array Terms On All Lines of Datafile
I'm not sure what you are after. But this tidy up of your code may contain the magic you require:
use warnings; use strict; my %people; my %families; while(<DATA>) { chomp; my ($family, $people) = split /=/, $_, 2; #split into two: family and memebers my @members = split /,\s*/, $people, -1; #split family lin +e into an array foreach my $member (@members) { #foreac +h member within array push @{$people{$member}}, $family; #push i +nto an array } push @{$families{$family}}, @members; } my $total_families = keys %families; my $total_people = 0; $total_people += @{$families{$_}} for keys %families; print "Num Families: $total_families\n"; print "Num People: $total_people\n"; print "All given Names: ", join (' ', sort keys %people), "\n"; print "All family names: ", join (' ', sort keys %families), "\n"; print "All names grouped by family:\n"; print " ", join ', ', do {my $famName = $_; map {"$_ $famName"} sort @{$families{$_}};}, + "\n" for sort keys %families; __DATA__ Flintstone=Barney, Fred, Wilma Jetson=Max, Tony, Wilma Simpson=Lisa, Barney, Wilma, Homer Alcatraz=Elijah, Max, Wilma
Prints:
Num Families: 4 Num People: 13 All given Names: Barney Elijah Fred Homer Lisa Max Tony Wilma All family names: Alcatraz Flintstone Jetson Simpson All names grouped by family: Elijah Alcatraz, Max Alcatraz, Wilma Alcatraz, Barney Flintstone, Fred Flintstone, Wilma Flintstone, Max Jetson, Tony Jetson, Wilma Jetson, Barney Simpson, Homer Simpson, Lisa Simpson, Wilma Simpson,
|
|---|