#!/usr/bin/perl -s use vars qw($g); use Set::CrossProduct; return unless @ARGV > 1; $g = " " unless defined $g; my $sets = [ map [ split /\s*,\s*/ ], @ARGV ]; my $iterator = Set::CrossProduct->new( $sets ); while( my $tuple = $iterator->get ) { print join $g, @$tuple; print "\n"; } =head1 NAME cross - output the cross product of two or more sets =head1 SYNOPSIS cross [-g gluestring] "item,item,item" "item,item,item" ... prompt> cross "a,b,c" "1,2,3" a 1 a 2 a 3 b 1 ... prompt> cross "a,b,c" "1,2,3" "x,y,z" a 1 x a 1 y a 1 z a 2 x ... # specify your own separator with -g prompt> cross -g="," "a,b,c" "1,2,3" a,1 a,2 =head1 SOURCE AVAILABILITY This is part of the Perl module C. This source is part of a SourceForge project which always has the latest sources in CVS, as well as all of the previous releases. http://sourceforge.net/projects/brian-d-foy/ If, for some reason, I disappear from the world, one of the other members of the project can shepherd this module appropriately. =head1 AUTHOR brian d foy, C<< >> =head1 COPYRIGHT AND LICENSE Copyright (c) 2007 brian d foy. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut