Data::Transformer

Traverse a data structure, altering it in place
Download

Data::Transformer Ranking & Summary

Advertisement

  • Rating:
  • License:
  • Perl Artistic License
  • Price:
  • FREE
  • Publisher Name:
  • Baldur Kristinsson
  • Publisher web site:
  • http://search.cpan.org/~baldur/Cache-BerkeleyDB-0.03/lib/Cache/BerkeleyDB.pm

Data::Transformer Tags


Data::Transformer Description

Traverse a data structure, altering it in place Data::Transformer is a Perl module to traverse a data structure, altering it in place.SYNOPSIS use Data::Transformer; # A: SIMPLE USAGE: # trim extra whitespace from normal strings inside ta. my $trim = sub { local($_)=shift; $$_ =~ s/^s*//; $$_ =~ s/s*$//; }; my $t = Data::Transformer->new(normal=>$trim); $t->traverse(ta); # B: MORE COMPLEX USAGE: # (a) uppercase all keys in all hashes contained in $data # and (b) convert any arrays to hashes: my $uc_hash = sub { my $h = shift; my @keys = keys %h; foreach (@keys) { my $uc = uc($_); if ($uc ne $_ && !exists($h->{$uc})) { $h->{$uc} = $h->{$_}; delete $h->{$_}; } elsif ($uc ne $_) { die "Bad key $_: '$uc' exists already"; } } }; my $ar_conv = sub { my %h = @{$_}; return sub { \%h }; }; my $t = Data::Transformer->new( hash => $uc_hash, array => $ar_conv, node_limit => 500_000 ); eval { $t->traverse($data) }; warn "Could not complete transformation: $@" if $@; # C: NON-DESTRUCTIVE TRAVERSAL # You don't actually have to change anything... my $size = 0; my $t = Data::Transformer->new( normal => sub { $size+=length(${ $_ }) }, hash => sub { $size+=length($_) for keys %{ $_ } }, ); my $nodes = $t->tranverse(ta); print "Number of nodes: $nodes "; print "Size of keys + values: $size "; # D: OBJECTS INSIDE A DATA STRUCTURE # Affect objects by using the class name as a key: my $t = Data::Transformer->new( 'My::Class' => sub { shift->set_foo('bar') } ); Requirements: · Perl


Data::Transformer Related Software