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.

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.

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.

canonicalize

$path = $path->canonicalize;

Canonicalize path.

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

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

clone

my $clone = $path->clone;

Clone path.

contains

my $success = $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 $slash = $path->leading_slash;
$path     = $path->leading_slash(1);

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

merge

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

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');

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;
my $str = "$path";

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 $slash = $path->trailing_slash;
$path     = $path->trailing_slash(1);

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

PATH PARTS

Direct array reference access to path parts is also possible. Note that this will normalize the path and that %2F will be treated as / for security reasons.

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

SEE ALSO

Mojolicious, Mojolicious::Guides, http://mojolicio.us.