in reply to Upper limit on length of arrays accepted by Set::CrossProduct

I just looked into the source:
sub cardinality { my $self = shift; my $product = 1; foreach my $length ( @{ $self->{lengths} } ) { $product *= ( $length + 1 ); } return $product; }

And $self->{lengths} is initialized like this:

$self->{lengths} = [ map { $#{$_} } @$array_ref ];

Looks right to me, and doesn't look like a length limit.

Could you try to find a data sample where cardinality returns 0?

The simplest explanation is that one of your arrays is empty.

Replies are listed 'Best First'.
Re^2: Upper limit on length of arrays accepted by Set::CrossProduct
by nikhil.patil (Sexton) on Jan 29, 2008 at 12:30 UTC
    Hi, Unknowingly, some empty arrays were getting included in the 10 arrays that I was using as input for Set::CrossProduct. On removing them, the cross-product result is perfect. Thanks!

      When you find a solution, please do not delete the content of the original node. The thread is next to worthless when that happens.

      If it happened accidentally, then never mind ;)

      --MidLifeXis

        The content has now been restored.
        The original node accidentally got deleted when I attempted to update it. I wanted to post the following code along with the question so as to give an idea about the syntax I'm using.
        #!/usr/bin/perl use Set::CrossProduct; my @arr; my @arr1 = 0..4; my @arr2 = 0..3; my @arr3 = 0..10; push(@arr,\@arr1); push(@arr,\@arr2); push(@arr,\@arr3); my $i = Set::CrossProduct->new(\@arr); print $i->cardinality, "\n"; while (my $a = $i->get) { print "@$a : "; };