#!/usr/bin/perl use strict; use warnings; my $cards = 5; my $holes = 3; my @arrangements = arrange(0, $cards, $holes); print "@$_\n" for @arrangements; sub arrange { my ($usedHoles, $remainingCount, $totalHoles) = @_; my @arrangements; return [$remainingCount] if ++$usedHoles == $totalHoles; for my $thisCount (1 .. $remainingCount - ($totalHoles - $usedHoles)) { my @subArrangements = arrange($usedHoles, $remainingCount - $thisCount, $totalHoles); push @arrangements, map {[$thisCount, @$_]} @subArrangements; } return @arrangements; }