use strict; use warnings; my @tablenums = ('1', '2', '3'); my (@johnData, @mikeData, @harryData); my @any = ("any", "data", "goes", "here"); my %Tables = ( '1' => "john", '2' => "mike", '3' => "harry", ); foreach (@tablenums){ eval "push \@${Tables{$_}}Data, (\"" . join ('","', @any, $_) . "\");"; } print "john`s data is @johnData!"; #prints "john`s data is any data goes here 1!"