Stephen D. Wells > Data-SearchReplace-1.02 > Data::SearchReplace

Download:
Data-SearchReplace-1.02.tar.gz

Dependencies

Annotate this POD

CPAN RT

Open  0
Report a bug
Module Version: 1.02   Source  

NAME ^

Data::SearchReplace - perl extention for searching and replacing entries in complex data structures

SYNOPSIS ^

  use Data::SearchReplace ('sr');
  sr({ SEARCH => 'searching', REPLACE => 'replacing'}, \$complex_var);

  # or OO

  use Data::SearchReplace;
  $sr = Data::SearchReplace->new({ SEARCH => 'search for this',
                                   REPLACE => 'replace with this' });

  $sr->sr(\$complex_var);
  $sr->sr(\$new_complex_var);

  # if you want more control over your search/replace pattern you
  #  can pass an entire regex instead complete with attributes

  sr({ REGEX => 's/nice/great/gi' }, \$complex_var);

  # you can even use a subroutine if you'd like
  #  the input variable is the value and the return sets the new
  #  value.

  sr({ CODE => sub { uc($_[0]) } }, \$complex_var);

  # now sr has a return value for the number of variables it changed
  my $ret = sr({ SEARCH => 'searching', REPLACE => 'replacing'}, \$complex_var);

  # returns the number of variables it matched

ABSTRACT ^

Data::SearchReplace - run a regex on all values within a complex data structure.

 use Data::SearchReplace qw(sr);
 sr({SEARCH => 'find', REPLACE => 'replace'}, \@data);
 sr({REGEX  => 's/find/replace/g'}, \%data);
 sr({CODE   => sub {uc($_[0])} }, \@data);
 my $matched = sr({REGEX  => 's/find/replace/g'}, \%data);

DESCRIPTION ^

Data::SearchReplace is used when you want to run a regex on all the entries of a complex data structure.

COMPLETE EXAMPLE

 use Data::SearchReplace qw(sr);
 %VAR = ( example => { drink => [ qw(wine beer kool-aid) ],
                       food  => 'and lots of it',
                       dessert => { strawberry => 'shortcake and cream',
                                    liver      => 'not on my diet',
                                    ice_cream  => 'works for me'} },
          filler  => 'naturally you can put whatever you want here',
          test    => 'this should change too' );
                                                                                
 # we'll capitalize the first character and strip off any extra words
 my $matched = sr({ REGEX => 's/(\w+).*/ucfirst($1)/e' }, \%VAR);

 print "Hey my program ", $VAR{example}->{dessert}->{ice_cream}, "!\n",
       $VAR{test}, " should work for you too!\n",
       "btw it altered $matched variables in this example.\n";

EXPORT

sr - however none by default

CAVEATS ^

This doesn't work well for CODE (subroutines) or GLOB (typeglobs). I'm not entirely certain how one would even go about working on these.

Also you should never pass a reference to a reference to the routine. In other words something like this will NOT work:

 my $complex_var = { hello => [qw(world earth)] };

  sr({ SEARCH => 'world', REPLACE => 'planet' }, \$complex_var);

  just use...

  sr({ SEARCH => 'world', REPLACE => 'planet' }, $complex_var);

AUTHOR ^

Stephen D. Wells, <wells@cedarnet.org>

COPYRIGHT AND LICENSE ^

Copyright 2003-2007 (C) by Stephen D. Wells. All rights reserved.

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

SEE ALSO ^

perl.