in reply to Need Help With Syntax for (Complicated for Me) Data Structure

A hash slice solves the problem (see perldata - slice):

use strict; use warnings; my %teamStats; my @paramNames = ('points', 'tallies', 'scores', 'metrics'); while (<DATA>) { chomp; my ($team, @params) = split /\s+/; next if @params < 4; # Populate new hash using a hash slice my %newParams; @newParams{@paramNames} = @params; push @{$teamStats{$team}}, \%newParams; } foreach my $team (keys %teamStats) { print "\n\nTeam:\t$team\n"; print "\t", join ("\t", @paramNames), "\n"; for my $game (@{$teamStats{$team}}) { # Hash slice to the rescue again print "\t", join ("\t", @$game{@paramNames}), "\n"; } } __DATA__ packers 4 40 400 4000 patriots 6 62 436 3987 colts 8 74 892 7666 bears 9 88 912 9550 packers 3 44 410 4200 patriots 7 66 510 3800 colts 10 77 910 7000 bears 11 88 1010 9410

Prints:

Team: colts points tallies scores metrics 8 74 892 7666 10 77 910 7000 Team: patriots points tallies scores metrics 6 62 436 3987 7 66 510 3800 Team: packers points tallies scores metrics 4 40 400 4000 3 44 410 4200 Team: bears points tallies scores metrics 9 88 912 9550 11 88 1010 9410

Update: cleaned up a little "legacy" code


DWIM is Perl's answer to Gödel

Replies are listed 'Best First'.
Re^2: Need Help With Syntax for (Complicated for Me) Data Structure
by o2bwise (Scribe) on Jan 30, 2007 at 02:12 UTC
    Thanks, Grandfather,

    I got pulled in a few directions, but will have a look tomorrow. I have it saved on my box.

    Tony
Re^2: Need Help With Syntax for (Complicated for Me) Data Structure
by o2bwise (Scribe) on Jan 31, 2007 at 20:09 UTC
    Hi,

    I just want to say that perhaps the biggest thing I learned was the need to surround the array with braces. I never noticed that before! And I saw it in all three replies to my post.

    I am wondering if you know any reference that discusses this syntax.

    Thanks again,

    Tony

      "complicated" data structures are really simple data structures that refer to other data structures. That is, generally you are dealing with scalars, arrays (that can only store scalars) or hashes (that can only store scalars). The trick is that a scalar can store a reference to other things. HoHoA and all the other variants work by storing references so the good oil you are looking for is References quick reference from the Tutorials section.


      DWIM is Perl's answer to Gödel