#!/usr/lib/perl use strict; use warnings; my @groups; my $size; while () { chomp; my ($type, $value) = split /\s*=\s*/, $_, 2; next if ! defined $value; if ($type eq 'fixed_size') { $size = $value; next; } push @groups, [split (/ /, $value), undef]; } pickem ($size, [], @groups); sub pickem { my ($needed, $givenList, @options) = @_; my $list = shift @options; for my $item (@$list) { if (! defined $item) { pickem ($needed, $givenList, @options); next; } if ($needed == 1) { print "@$givenList $item\n"; next; } pickem ($needed - 1, [@$givenList, $item], @options); } } __DATA__ group_1 = A B C group_2 = 1 2 3 4 group_3 = yellow blue green group_4 = tiny small medium large gigantic fixed_size = 2