Ihor, спасибо!Вот какой вариант получился с рекурсией (наверное, не очень изящный - давно не программировал). Вы абсолютно правы - при рекурсии возможны проблемы со стеком. Еще раз спасибо!
#!/usr/bin/perl
sub get_element {
my ($array, $variant) = @_;
if ($array == $#rows) {
for $element (0 .. $#{ $rows[$array] }) {
print Result join (" ", @{ $variant });
print Result " ", $rows[$array][$element], "\n";
}
} else {
for $element (0 .. $#{ $rows[$array] }) {
my @incomplete_variant = @{ $variant };
push @incomplete_variant, $rows[$array][$element];
my $inner_array = $array + 1;
get_element($inner_array, \@incomplete_variant);
}
}
}
open (List, "list.txt") or die "Can't read list $!";
while (<List>) {
push @rows, [ split ];
}
close(List);
open (Result, "> result.txt") or die "Can't write results $!";
for $i (0..$#{ $rows[0] }) {
my @variant;
push (@variant, $rows[0][$i]);
get_element(1, \@variant);
undef @variant;
}
close (Result);