Mojo::Path

Section: User Contributed Perl Documentation (3)
Updated: 2018-11-22
Page Index
 

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 <http://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>.


 

Index

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