#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @list = (1 .. 5); my $take = 2; my @combs = comb_integral(\@list, $take); for my $comb (@combs) { print "@$comb\n"; } sub comb_integral { my ($items, $group, $next) = @_; $next ||= 0; if ($group == 1) { return map [$_], @$items[$next..$#$items]; } else { my @returns; for my $i ($next..$#$items) { push @returns, map [$$items[$i], @$_], comb_integral($items, $group - 1, $i + 1); } return @returns; } }