for my $row (combinations(1..3)) { my @row = 1..3; $row[$_-1] = "($row[$_-1])" for @$row; print "@row\n"; } # from [id://24270] by [merlyn] sub combinations { return [] unless @_; my $first = shift; my @rest = combinations(@_); return @rest, map { [$first, @$_] } @rest; } __END__ 1 2 3 1 2 (3) 1 (2) 3 1 (2) (3) (1) 2 3 (1) 2 (3) (1) (2) 3 (1) (2) (3)