NAME
Mojo::Path - Path
SYNOPSIS
use Mojo::Path;# Parsemy $path = Mojo::Path->new('/foo%2Fbar%3B/baz.html');say $path->[0];# Buildmy $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.
# TrueMojo::Path->new('/foo/bar')->contains('/');Mojo::Path->new('/foo/bar')->contains('/foo');Mojo::Path->new('/foo/bar')->contains('/foo/bar');# FalseMojo::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 slashpush @{$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>.