use strict; use warnings; @_ = (2..10,'J','Q','K','A'); comb('', 4, 2..4,6..10,'J','Q','K','A',@_,@_,@_); sub comb { my ($str, $depth, @items) = @_; if (!$depth--) { interpret($str); return; } comb("$str $items[$_]", $depth, @items[($_+1)..$#items]) for (0..$#items) } sub interpret { my @cards = split / /, "5$_[0]"; # Do whatever with @cards; }