use strict; use warnings; my @data=( [1,2,3], [4,5,6], [7,8], [10,11,12] ); my @categories=qw/a b c/; my @master; foreach my $d(@data){ my %h; foreach my $c(0 .. $#categories){ my $val=$d->[$c]; my $cat=$categories[$c]; $h{$val}=$cat; } push @master, \%h; }