---
name: "Catmandu::Path::simple"
section: "3pm"
platform: "linux"
package: "libcatmandu-perl"
version: "1.2024-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Catmandu::Path::simple"
---

# Catmandu::Path::simple(3pm)

The default Catmandu path syntax

## NAME

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

## 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 });
```

## 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'}
```

## SEE ALSO

Catmandu::Path.
