$ perl -e ' my @hashes; my @days = ([1,2,3], [], [], [4,5,6]); for (0 .. $#days) { my %x = (day => 1+$_); @x{qw{bal pay tot}} = @{$days[$_]} ? @{$days[$_]} : ("-") x 3; push @hashes, \%x; } use Data::Dump; dd \@hashes; ' [ { bal => 1, day => 1, pay => 2, tot => 3 }, { bal => "-", day => 2, pay => "-", tot => "-" }, { bal => "-", day => 3, pay => "-", tot => "-" }, { bal => 4, day => 4, pay => 5, tot => 6 }, ]