[Pdx-pm] module recommendation: regex over data structure
Michael G Schwern
schwern at pobox.com
Wed Jun 26 14:57:51 PDT 2013
Just to throw another into the mix: JSON::Path. It's like XPath but for
JSON. That's your "regex over data structure".
https://metacpan.org/module/JSON::Path
And if performance IS a concern, here's Andy Armstrong's version in C.
https://github.com/AndyA/jsondata
On Wed, Jun 26, 2013 at 10:56 AM, Josh Heumann <pdx.pm at joshheumann.com>wrote:
> 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
>>
>
>
> _______________________________________________
> 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/5f6639c0/attachment.html>
More information about the Pdx-pm-list
mailing list