NAME
    Data::Enumerator - some iterator utilities for perl

SYNOPSIS
        use Data::Enumerator qw/pattern generator/;

        my $cases = generator(
            {   hoge  => pattern(qw/a b c/),
                fuga  => pattern(qw/x y z/),
                fixed => 0
            }
        );

        for my $case ( $cases->list ){
               print pp($case);
        }

         # { hoge => 'a',fuga => 'x'}
         # { hoge => 'a',fuga => 'y'}
         # { hoge => 'a',fuga => 'z'}
         # { hoge => 'b',fuga => 'x'}
         # { hoge => 'b',fuga => 'y'}
         # { hoge => 'b',fuga => 'z'}
         # { hoge => 'c',fuga => 'x'}
         # { hoge => 'c',fuga => 'y'}
         # { hoge => 'c',fuga => 'z'}

DESCRIPTION
    Data::Enumerator is utilities for iteration and test data generation
    like itertools in python or C# IEnumerable.

    This module is marked EXPERIMENTAL. API could be changed without any
    notice.

  pattern
    to create an iterator by a provided list.

        my $gen = pattern(qw/a b c/);
        # $gen->list => ('a','b','c')

    a generator can product another generator

        my $gen = pattern(qw/a b c/)->product(pattern(qw/x y/));
        # $gen->list
        #  ["a", "x"],
        #  ["a", "y"],
        #  ["b", "x"],
        #  ["b", "y"],
        #  ["c", "x"],
        #  ["c", "y"],

  generator
    to create all pattern of data structure which contains pattern.

        my $users = generator({
            sex      => pattern(qw/male female/),
            age      => range(10,90,5),
            category => pattern(qw/elf human dwarf gnome lizardman/)
        })

    this code is a syntax sugar of the following code:

        my $user = pattern(qw/male female/)
            ->product( range(10,90,5) )
            ->product( pattern(qw/elf human dwarf gnome lizardman/))
            ->select(sub{
                +{ sex => $_[0]->[0],age => $_[0]->[1],category => $_[0]->[2]}
            });

    so you can enumerate all pattern of users.

        $user->each(sub{
            my $user = shift;
            $ do stuff
        });

AUTHOR
    Daichi Hiroki <hirokidaichi {at} gmail.com>

SEE ALSO
LICENSE
    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

