Mojo::Path - Path

NAME  SYNOPSIS  DESCRIPTION  ATTRIBUTES  charset  METHODS  canonicalize  clone  contains  leading_slash  merge  new  parse  to_abs_string  parts  to_dir  to_route  to_string  trailing_slash  OPERATORS  array  bool  stringify  SEE ALSO 

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>.


Updated 2024-01-29 - jenkler.se | uex.se