use Algorithm::Loops qw( NestedLoops ); sub expandSubLists { my $av= shift(@_); return [ NestedLoops( [ map ref($_) ? $_ : [$_], @$av ], sub { [@_] }, ), ]; }