Data::Enumerator - some iterator utilities for perl
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'}
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.
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"],
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 });
Daichi Hiroki <hirokidaichi {at} gmail.com>
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Data::Enumerator, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Data::Enumerator
CPAN shell
perl -MCPAN -e shell install Data::Enumerator
For more information on module installation, please visit the detailed CPAN module installation guide.