[Pdx-pm] module recommendation: regex over data structure

Jason Messer jasoncmesser at gmail.com
Sat Jun 15 13:02:53 PDT 2013


I somewhat regularly use something like the following

use Data::Dumper;
$Data::Dumper::Terse = 1;

$foo = {
        'onexx' => 1,
        'twoxx' => 2,
        'threexx' => 3,
        'fourxx' => ["axxb", "xbx", 'c', 'x', "d", "e", 'f', 42],
        'inc' => \@INC,
        'env' => \%ENV
};

$x = Dumper($foo);

$x =~ s/xx/__XX__/g;
$x =~ s/perl/##PERL##/g;
$e = eval($x);
print Dumper($e)

This has the advantage of simplicity, you can dump the string to a file and
monkey with it with an editor before evaling it back.

It has all the problems of unstructured text, and it's definitely on the
quick and dirty side of performance considerations, but it works and is
simple.

-Jason



On Sat, Jun 15, 2013 at 12:32 PM, Josh Heumann <pdx.pm at joshheumann.com>wrote:

> To be more clear, searching hash keys isn't required as the string will
> have a sigil to identify strings to be interpolated, but if the strategy
> avoided looking at hash keys, that would help avoid potentially
> catastrophic mistakes.
>
> J
>
>
> On Sat, Jun 15, 2013 at 11:22 AM, benh <ben.hengst at gmail.com> wrote:
>
>> I agree though in my reading that is an expected feature:
>>
>> > ...would replace foo with bar in all strings at all levels.
>>
>> Though again I could also be completely missing the intent here so it
>> is a completely fair thing to mention.
>>
>> On Sat, Jun 15, 2013 at 10:10 AM, Braden Kelley <bmk at rentrak.com> wrote:
>> > One potential problem with serializing using something like JSON::XS is
>> a
>> > simple regex replace would also end up replacing hash keys, not just
>> their
>> > values.
>> >
>> > # from Josh Heumann on Friday 14 June 2013:
>> >>Using YAML/JSON isn't a bad idea, but I'm worried about the
>> >>performance hit.
>> >
>> > As long as your replacement doesn't break quoting or otherwise trip on
>> > the serialization, yeah.  JSON::XS was super quick and the fastest
>> > serializer last time I checked.  You'll need the ram.
>> >
>> > Recursive implementation is easy enough.
>> >
>> > sub replace_deeply {
>> >   my ($data, $match, $replace) = @_;
>> >   my $r;
>> >   $r = sub {
>> >     my $ref = ref($_[0]) or return $_[0] =~ s/$match/$replace/;
>> >     if($ref eq 'ARRAY') {
>> >       $r->($_) for @{$_[0]}
>> >     }
>> >     elsif($ref eq 'HASH') {
>> >       $r->($_) for values %{$_[0]};
>> >     }
>> >   };
>> >   $r->($data);
>> >   return $data;
>> > }
>> >
>> > --Eric
>> > --
>> > ---------------------------------------------------
>> >     http://scratchcomputing.com
>> > ---------------------------------------------------
>> > _______________________________________________
>> > Pdx-pm-list mailing list
>> > Pdx-pm-list at pm.org
>> > http://mail.pm.org/mailman/listinfo/pdx-pm-list
>> >
>> > _______________________________________________
>> > Pdx-pm-list mailing list
>> > Pdx-pm-list at pm.org
>> > http://mail.pm.org/mailman/listinfo/pdx-pm-list
>>
>>
>>
>> --
>> benh~
>>
>> http://about.notbenh.info
>>
>> Stability is not a Regression.
>> _______________________________________________
>> Pdx-pm-list mailing list
>> Pdx-pm-list at pm.org
>> http://mail.pm.org/mailman/listinfo/pdx-pm-list
>>
>>
>
> _______________________________________________
> Pdx-pm-list mailing list
> Pdx-pm-list at pm.org
> http://mail.pm.org/mailman/listinfo/pdx-pm-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/pdx-pm-list/attachments/20130615/ab3865df/attachment.html>


More information about the Pdx-pm-list mailing list