use strict; my @tablenums = ('1', '2', '3'); my %tables = ( '1' => { name => "john", data => [] }, '2' => { name => "mike", data => [] }, '3' => { name => "harry", data => [] }, ); foreach (@tablenums) { push @{$tables{$_}->{data}}, "any", "data", "goes", "here"; } print "$tables{1}->{name}`s data is @{$tables{1}->{data}}!"; #prints "john`s data is any data goes here!"