http://www.perlmonks.org?node_id=912416

metaperl has asked for the wisdom of the Perl Monks concerning the following question:

I'm trying to get Data::Rmap to change this:
[ 'note', [ 'shopping', [ 'item' ] ] ];
to this:
[ 'note', [ 'shopping', [ item => 'bread' ], [ item => 'butter' ], [ item => 'beans' ], ] ];
But for some reason, it's not working out, even though I think it should per my commented code below:
use strict; use warnings; use Data::Rmap qw(:all); my $initial = [ note => [ shopping => [ 'item' ] ] ]; use Data::Dumper; my ($dump) = rmap_array { # If we get an arrayref whose first element is 'shopping' if ($_->[0] eq 'shopping') { my @item; # build a list of shopping items for my $item qw(bread butter beans) { push @item, [ item => $item ]; } # create a new array with those items my $newdata = [ shopping => \@item ]; # return immediately with new data, not visiting children # of this array cut($newdata) } else { # if the arrayrefs first element is not 'shopping' # then simply pass it through $_; } } $initial ; warn Dumper($initial, $dump);




The mantra of every experienced web application developer is the same: thou shalt separate business logic from display. Ironically, almost all template engines allow violation of this separation principle, which is the very impetus for HTML template engine development.

-- Terence Parr, "Enforcing Strict Model View Separation in Template Engines"