#!/usr/bin/perl # http://perlmonks.org/index.pl?node_id=775872 use strict; use Data::Dumper; my %record; my @fields = qw( member_number Surname Firstname Job Balance ); my $type; while () { if (/^A/) { my @cols = split( "," ); $type = $cols[1]; for (0..$#fields) { $record{$type}->{$fields[$_]} = $cols[$_]; } } else { chomp; my $val = (split( "," ))[1]; push( @{ $record{$type}->{"transactions"} }, $val ); } } print Dumper \%record; __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