use strict; use warnings; my $lvl = shift || 2; my @indices = indices( $lvl ); print "$_\n" for @indices; sub indices { my $lvl = shift; die if $lvl < 0; return $lvl ? map make_indices( $_ ), indices( $lvl - 1 ) : ( '' ); } sub make_indices { my $base = shift; return map "$base${_}1", 'A' .. 'D'; }