SYNOPSIS

     use PERLANCAR::Permute::Named;
    
     my @p = permute_named(bool => [ 0, 1 ], x => [qw(foo bar baz)]);
     for (@p) {
         some_setup() if $_->{bool};
         other_setup($_->{x});
         # ... now maybe do some tests ...
     }

DESCRIPTION

    This module is like Permute::Named, except that it uses a different
    technique: dynamically generates nested loop Perl code, evals that, and
    avoids repetitive deep cloning. It can be faster than Permute::Named as
    the number of keys and values increase.

FUNCTIONS

 permute_named(@list) => @list | $arrayref

    Takes a list of key-specification pairs where the specifications can be
    single values or references to arrays of possible actual values. It
    then permutes all key-specification combinations and returns the
    resulting list (or arrayref) of permutations, depending on context.

    The function expects the pairs as an even-sized list. Each
    specification can be a scalar or a reference to an array of possible
    values.

    Example 1:

     permute_named(bool => [ 0, 1 ], x => [qw(foo bar baz)])

    returns:

     [ { bool => 0, x => 'foo' },
       { bool => 0, x => 'bar' },
       { bool => 0, x => 'baz' },
       { bool => 1, x => 'foo' },
       { bool => 1, x => 'bar' },
       { bool => 1, x => 'baz' }, ]

    Example 2:

     permute_named(bool => 1, x => 'foo')

    just returns the one permutation:

     {bool => 1, x => 'foo'}

SEE ALSO

    Permute::Named, Permute::Named::Iter and CLI <permute-named>

    Set::CrossProduct and cross