@characters = ( [ "h" ], [ "e" ], [ "l", "p", "i" ], [ "l" ], [ "o" ], ); sub spell{ my $prefix = shift; my @c = @{+shift}; unless( @c ){ return print "$prefix\n"; } foreach( @c ){ spell("$prefix$_",@_); } } spell("",@characters);