my @sets; for my $x (1..3){ my @products = map { $x ** $_ } (1..3); push @sets, \@products; } use Data::Dumper; print Dumper(\@sets);