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

Josh Heumann pdx.pm at joshheumann.com
Wed Jun 26 10:56:53 PDT 2013


Reporting in!

All of these methods worked really well.

Data::Dumper.  Intriguing that it works, I never would have thought about
it.  In a post on stack overflow, Schwern mentions that Data::Serializer is
a better way to go (thought I didn't try it).

Data::Visitor::Callback.  The most elegant solution.  I love that there's a
module for this, and it does what it says on the box.

YAML.  Probably what we'll go with, since it's a technique that we're using
elsewhere in this library, and clearly performance isn't a concern there.

Thanks everyone for your suggestions.  This is why I love this community.

J



On Sat, Jun 15, 2013 at 1:02 PM, Jason Messer <jasoncmesser at gmail.com>wrote:

> 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
>>
>
>
> _______________________________________________
> 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/20130626/0379cf4f/attachment.html>


More information about the Pdx-pm-list mailing list