#!/usr/local/bin/perl -w

use Algorithm::Combinatorics qw(permutations circular_permutations);
use Time::HiRes qw(gettimeofday tv_interval);
use strict;

my @data = 0..9;
my $c=0;
# scalar context gives an iterator
my $t0 = [gettimeofday];
my $iter = circular_permutations(\@data);
while (my $p = $iter->next) {
    # ...
    print "@$p\n";
    $c++;
    #    last if ++$c > 1000
}
my $elapsed1 = tv_interval ( $t0 );

my $cc=0;
my $t2 = [gettimeofday];
my $iter = permutations(\@data);
while (my $p = $iter->next) {
    # ...
    print "@$p\n";
    $cc++;
#    last if ++$cc > 1000
}
my $elapsed2 = tv_interval ( $t2 );
print "TOTAL $c circular permutations, elapsed time $elapsed1\n";
print "TOTAL $cc permutations, elapsed time $elapsed2\n";

# list context slurps
# my @all_permutations = permutations(\@data);

__END__

Un algoritmo muy eficiente
  
