#!/usr/bin/perl use warnings; use strict; use Data::Dumper; my ( $number, %accounts ); while ( ) { chomp; if ( /^A,/ ) { ( undef, $number, my @fields ) = split /,/, $_, -1; @{ $accounts{ $number } }{ qw/ surname firstname job balance / + } = @fields; } elsif ( /^B,/ ) { my $transaction = ( split /,/ )[ 1 ]; push @{ $accounts{ $number }{ transactions } }, $transaction; } } my $account_hash = $accounts->{78}; foreach my $transactions ($account_hash){ push @{ $account_hash{ transactions } }, '-42.37'; } print Dumper $account_hash{ transactions };