#!/usr/bin/perl use warnings; use strict; my $src = [['A', 'B', 'C', 'D'],['P', 'Q', 'R'],['1', '2', '3', '4', '5']]; my $products = ['']; for my $level (@$src) { my $old_products = $products; $products = []; for my $prefix (@$old_products) { for (@$level) { push(@$products, "$prefix$_"); } } } print "$_\n" for @$products;