use Data::Dumper; use strict; use warnings; my $HoA = { flintstones => [ "fred", "barney" ], jetsons => [ "george", "jane"], }; my $AoH; for my $flintstone (@{$HoA->{"flintstones"}}) { for my $jetson (@{$HoA->{"jetsons"}}) { push @$AoH, {"flintstones" => $ flintstone, "jetsons" => $jetson}; } } print Dumper($AoH);