---
name: "Mojo::Path"
section: "3pm"
platform: "linux"
package: "libmojolicious-perl"
version: "9.39+dfsg-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Mojo::Path"
---

# Mojo::Path(3pm)

Path

## NAME

Mojo::Path - Path

## SYNOPSIS

```
  use Mojo::Path;
  # Parse
  my $path = Mojo::Path->new('/foo%2Fbar%3B/baz.html');
  say $path->[0];
  # Build
  my $path = Mojo::Path->new('/i/♥');
  push @$path, 'mojolicious';
  say "$path";
```

## DESCRIPTION

Mojo::Path is a container for paths used by Mojo::URL, based on RFC 3986 \<https://tools.ietf.org/html/rfc3986\>.

## ATTRIBUTES

Mojo::Path implements the following attributes.

### charset

```
  my $charset = $path->charset;
  $path       = $path->charset('UTF-8');
```

Charset used for encoding and decoding, defaults to `"UTF-8"`.

```
  # Disable encoding and decoding
  $path->charset(undef);
```

## METHODS

Mojo::Path inherits all methods from Mojo::Base and implements the following new ones.

### canonicalize

```
  $path = $path->canonicalize;
```

Canonicalize path by resolving `"."` and `".."`, in addition `"..."` will be treated as `"."` to protect from path traversal attacks.

```
  # "/foo/baz"
  Mojo::Path->new('/foo/./bar/../baz')->canonicalize;
  # "/../baz"
  Mojo::Path->new('/foo/../bar/../../baz')->canonicalize;
  # "/foo/bar"
  Mojo::Path->new('/foo/.../bar')->canonicalize;
```

### clone

```
  my $clone = $path->clone;
```

Return a new Mojo::Path object cloned from this path.

### contains

```
  my $bool = $path->contains('/i/♥/mojolicious');
```

Check if path contains given prefix.

```
  # True
  Mojo::Path->new('/foo/bar')->contains('/');
  Mojo::Path->new('/foo/bar')->contains('/foo');
  Mojo::Path->new('/foo/bar')->contains('/foo/bar');
  # False
  Mojo::Path->new('/foo/bar')->contains('/f');
  Mojo::Path->new('/foo/bar')->contains('/bar');
  Mojo::Path->new('/foo/bar')->contains('/whatever');
```

### leading\_slash

```
  my $bool = $path->leading_slash;
  $path    = $path->leading_slash($bool);
```

Path has a leading slash. Note that this method will normalize the path and that `%2F` will be treated as `"/"` for security reasons.

```
  # "/foo/bar"
  Mojo::Path->new('foo/bar')->leading_slash(1);
  # "foo/bar"
  Mojo::Path->new('/foo/bar')->leading_slash(0);
```

### merge

```
  $path = $path->merge('/foo/bar');
  $path = $path->merge('foo/bar');
  $path = $path->merge(Mojo::Path->new);
```

Merge paths. Note that this method will normalize both paths if necessary and that `%2F` will be treated as `"/"` for security reasons.

```
  # "/baz/yada"
  Mojo::Path->new('/foo/bar')->merge('/baz/yada');
  # "/foo/baz/yada"
  Mojo::Path->new('/foo/bar')->merge('baz/yada');
  # "/foo/bar/baz/yada"
  Mojo::Path->new('/foo/bar/')->merge('baz/yada');
```

### new

```
  my $path = Mojo::Path->new;
  my $path = Mojo::Path->new('/foo%2Fbar%3B/baz.html');
```

Construct a new Mojo::Path object and "parse" path if necessary.

### parse

```
  $path = $path->parse('/foo%2Fbar%3B/baz.html');
```

Parse path.

### to\_abs\_string

```
  my $str = $path->to_abs_string;
```

Turn path into an absolute string.

```
  # "/i/%E2%99%A5/mojolicious"
  Mojo::Path->new('/i/%E2%99%A5/mojolicious')->to_abs_string;
  Mojo::Path->new('i/%E2%99%A5/mojolicious')->to_abs_string;
```

### parts

```
  my $parts = $path->parts;
  $path     = $path->parts([qw(foo bar baz)]);
```

The path parts. Note that this method will normalize the path and that `%2F` will be treated as `"/"` for security reasons.

```
  # Part with slash
  push @{$path->parts}, 'foo/bar';
```

### to\_dir

```
  my $dir = $route->to_dir;
```

Clone path and remove everything after the right-most slash.

```
  # "/i/%E2%99%A5/"
  Mojo::Path->new('/i/%E2%99%A5/mojolicious')->to_dir->to_abs_string;
  # "i/%E2%99%A5/"
  Mojo::Path->new('i/%E2%99%A5/mojolicious')->to_dir->to_abs_string;
```

### to\_route

```
  my $route = $path->to_route;
```

Turn path into a route.

```
  # "/i/♥/mojolicious"
  Mojo::Path->new('/i/%E2%99%A5/mojolicious')->to_route;
  Mojo::Path->new('i/%E2%99%A5/mojolicious')->to_route;
```

### to\_string

```
  my $str = $path->to_string;
```

Turn path into a string.

```
  # "/i/%E2%99%A5/mojolicious"
  Mojo::Path->new('/i/%E2%99%A5/mojolicious')->to_string;
  # "i/%E2%99%A5/mojolicious"
  Mojo::Path->new('i/%E2%99%A5/mojolicious')->to_string;
```

### trailing\_slash

```
  my $bool = $path->trailing_slash;
  $path    = $path->trailing_slash($bool);
```

Path has a trailing slash. Note that this method will normalize the path and that `%2F` will be treated as `"/"` for security reasons.

```
  # "/foo/bar/"
  Mojo::Path->new('/foo/bar')->trailing_slash(1);
  # "/foo/bar"
  Mojo::Path->new('/foo/bar/')->trailing_slash(0);
```

## OPERATORS

Mojo::Path overloads the following operators.

### array

```
  my @parts = @$path;
```

Alias for "parts". Note that this will normalize the path and that `%2F` will be treated as `"/"` for security reasons.

```
  say $path->[0];
  say for @$path;
```

### bool

```
  my $bool = !!$path;
```

Always true.

### stringify

```
  my $str = "$path";
```

Alias for "to\_string".

## SEE ALSO

Mojolicious, Mojolicious::Guides, \<https://mojolicious.org\>.
