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; } #### Use of uninitialized value $val in hash element at ./test.pl line 23.