package Tree::Transform; use Moose; use Sub::Exporter; use Params::Validate ':all'; our $VERSION='0.1'; Sub::Exporter::setup_exporter({ exports => [qw(tree_rule new_transformer)], groups => { default => [ 'tree_rule', 'new_transformer' => {-as => 'new'} ], } }); sub _rules_store { no strict 'refs'; if (!defined *{$_[0].'::_tree_transform_rules'}{HASH}) { *{$_[0].'::_tree_transform_rules'}={}; } return *{$_[0].'::_tree_transform_rules'}{HASH}; } sub tree_rule { my (%args)=validate(@_, { match => { type => SCALAR, optional => 1 }, action => { type => CODEREF }, name => { type => SCALAR, optional => 1}, priority => { type => SCALAR, default => 1 }, }); # TODO at least one of 'name' and 'match' must be specified my $store=_rules_store(scalar caller); push @{$store->{by_match}},\%args; if ($args{name}) { push @{$store->{by_name}{$args{name}}},\%args; } return; } sub new_transformer { } __PACKAGE__->meta->make_immutable;no Moose; __END__ =head1 NAME Tree::Transform - transform tree data, like XSLT but in Perl =head1 AUTHOR Gianni Ceccarelli =cut