use strict; use warnings; use Data::Dumper; use Fatal qw/ open close / ; my $data = "accounts.txt"; open (DAT, $data) or die "\"$data\" not existed or can't be opened!\n"; my @accounts; my @transactionamount; my @fields1 = ( 'Type', 'member number', 'Surname', 'Firstname', 'Job', 'Balance', ); my @fields2 = qw/Type TransactionAmount/; my $fields1; my $fields2; my $values; while () { chomp; my @values = split(/,/); my %entry = map { $fields1[$_] => $values[$_] } ( 0..$#fields1 ); #print Dumper %entry; if ($entry{"Type"} eq 'B'){ my %transactionamount = map { $fields2[$_] => $values[$_] } ( 0..$#fields2 ); push @transactionamount, \%transactionamount; } else { push @accounts, \%entry; } } print Dumper @transactionamount;