in reply to read multiple record data and populate in a new data stucture

Here was my "go at it". Very similar to jwkrahn's solution. He posted while I was doing some debug, but I thought that there is enough difference to post it. The key to this thing is the use of hash slice and also that you can create another hash key "on the fly" via a push. Have fun!!
#!/usr/bin/perl -w use strict; use Data::Dumper; my %accounts; #a hash of hash my $member_number; while (<DATA>) { chomp; my ($type, @data) = split (/,/,$_); if ($type eq 'A') { $member_number = shift @data; @{$accounts{$member_number}}{qw/Surname Firstname Job Balance/} = @data; #extra line here so text won't wrap } elsif ($type eq 'B') { push @{$accounts{$member_number}{'transactions'}},@data; } else {die "database corrupted";} #optional.... } print Dumper \%accounts; #prints: #$VAR1 = { # '34' => { # 'Surname' => 'Einstein', # 'Job' => 'Physics', # 'Firstname' => 'Albert', # 'transactions' => [ # '2346.89', # '876.23', # '7656.81', # '745.21', # '25.63', # '89.56', # '7789.23' # ], # 'Balance' => '12.22' # }, # '01' => { # 'Surname' => 'Newton', # 'Job' => 'Physics', # 'Firstname' => 'Issac', # 'transactions' => [ # '144.56', # '1034.65', # '12.23' # ], # 'Balance' => ' 5.6' # } # }; __DATA__ A,01,Newton,Issac,Physics, 5.6 B,144.56 B,1034.65 B,12.23 A,34,Einstein,Albert,Physics,12.22 B,2346.89 B,876.23 B,7656.81 B,745.21 B,25.63 B,89.56 B,7789.23

Replies are listed 'Best First'.
Re^2: read multiple record data and populate in a new data stucture
by fseng (Novice) on Jun 30, 2009 at 05:32 UTC
    Thanks Marshall, a Q here.
    @{$accounts{$member_number}}{qw/Surname Firstname Job Balance/} = @data;
    Are you singing the keys as the member number here?
      Ha! I like your wit. You have the right temperament to be a great engineer!