logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Catmandu::Path::simple - The default Catmandu path syntax

Configuration

       path
           The string version of the path. Required.

Methods

getter
       Returns  a  coderef  that  can  get  the values for the path.  The coderef takes the data as argument and
       returns the matching values as an arrayref.

           my $path = Catmandu::Path::Simple->new(path => '$.foo');
           my $data = {foo => 'foo', bar => 'bar'};
           $path->getter->($data);
           # => ['foo']

   setter
       Returns a coderef that can create the final part of  the   path  and  set  it's  value.  In  contrast  to
       "creator"  this  will  only set the value if the intermediate path exists.  The coderef takes the data as
       argument and also returns the data.

           my $path = Catmandu::Path::Simple->new(path => '$.foo.$append');
           $path->creator(value => 'foo')->({});
           # => {foo => ['foo']}
           $path->creator(value => sub { my ($val, $data) = @_; $val // 'foo' })->({});
           # => {foo => ['foo']}

           # calling creator with no value creates a sub that takes the value as an
           # extra argument
           $path->creator->({}, 'foo');
           $path->creator->({}, sub { my ($val, $data) = @_; $val // 'foo' });
           # => {foo => ['foo']}

   setter(\&callback|$value)
       This is a shortcut for "setter(value =" \&callback|$value)>.

   updater(value=>\&callback)
       Returns a coderef that can update the value of an existing path.

   updater(if_*=>[\&callback])
       TODO

   updater(if=>[\&callback])
       TODO

   updater(if_*=>\&callback)
       TODO

   updater(if=>\&callback)
       TODO

   updater(\&callback)
       This is a shortcut for "updater(value =" \&callback|$value)>.

   creator(value=>\&callback|$value)
       Returns a coderef that can create the path and set it's value. In contrast to "setter" this also  creates
       the intermediate path if necessary.  The coderef takes the data as argument and also returns the data.

           my $path = Catmandu::Path::Simple->new(path => '$.foo.$append');
           $path->creator(value => 'foo')->({});
           # => {foo => ['foo']}
           $path->creator(value => sub { my ($val, $data) = @_; $val // 'foo' })->({});
           # => {foo => ['foo']}

           # calling creator with no value creates a sub that takes the value as an
           # extra argument
           $path->creator->({}, 'foo');
           $path->creator->({}, sub { my ($val, $data) = @_; $val // 'foo' });
           # => {foo => ['foo']}

   creator(\&callback|$value)
       This is a shortcut for "creator(value =" \&callback|$value)>.

   deleter
       Returns  a coderef that can delete the path.  The coderef takes the data as argument and also returns the
       data.

           my $path = Catmandu::Path::Simple->new(path => '$.foo');
           $path->deleter->({foo => 'foo', bar => 'bar'});
           # => {bar => 'bar'}

Name

       Catmandu::Path::simple - The default Catmandu path syntax

See Also

       Catmandu::Path.

perl v5.40.0                                       2025-01-17                        Catmandu::Path::simple(3pm)

Synopsis

           my $data = {foo => {bar => ['first_bar', 'second_bar']}};

           my $path = Catmandu::Path::simple->new("foo.bar.0");

           my $getter = $path->getter;
           my $first_bar = $getter->($data);

           my $updater = $path->updater(sub { my $str = $_[0]; uc $str });
           $updater->($data);
           # => {foo => {bar => ['FIRST_BAR', 'second_bar']}}

           # safer version with a type check
           my $updater = $path->updater(if_string => sub { my $str = $_[0]; uc $str });

See Also