my @a = qw( a b );
my @b = map { my $x = $_;
map { $x . $_ } @a;
} @a;
####
my @a = qw( a b c );
####
my @b = map { my $x = $_;
map { my $y = $_;
map { $x . $y . $_ } @a;
} @a;
} @a;
####
sub f
{ my ( $n, @a ) = @_;
croak "illegal value for n: $n" if $n < 1;
return @a if $n == 1;
map { my $x = $_;
map { $x . $_ ) } f( $n - 1, @a );
} @a;
}
####
sub f
{ my ( $n, $g, @a ) = @_;
croak "illegal value for n: $n" if $n < 1;
return @a if $n == 1;
map { my $x = $_;
map { $g->( $x, $_ ) } f( $n - 1, $g, @a );
} @a;
}