名前

Mojo::Path - パス

使い方

use Mojo::Path;

# 解析
my $path = Mojo::Path->new('/foo%2Fbar%3B/baz.html');
say $path->[0];

# 構築
my $path = Mojo::Path->new('/i/♥');
push @$path, 'mojolicious';
say "$path";

説明

Mojo::PathMojo::URLで利用される。URLのパスのコンテナです。

属性

Mojo::Pathは次の属性を実装しています。

charset

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

エンコードとデコードに使う文字コード。デフォルトはUTF-8です。

# エンコードとデコードを無効にする
$path->charset(undef);

メソッド

Mojo::PathMojo::Baseからすべてのメソッドを継承しており、 次のすべてのメソッドを実装しています。

canonicalize

$path = $path->canonicalize;

パスを正規化します。

# "/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;

パスを複製し、新しいMojo::Pathオブジェクトを返します。

contains

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

パスが与えられたプレフィックスを含んでいるかどうかチェックします。

# 真
Mojo::Path->new('/foo/bar')->contains('/');
Mojo::Path->new('/foo/bar')->contains('/foo');
Mojo::Path->new('/foo/bar')->contains('/foo/bar');

# 偽
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);

パスは先頭にスラッシュを持ちます。 このメソッドはパスをノーマライズし、 %2Fはセキュリティ的な理由のために、 /として扱われることに注意してください。

# "/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);

パスをマージします。 このメソッドはパスをノーマライズし、 %2Fはセキュリティ的な理由のために、 /として扱われることに注意してください。

# "/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/bar%3B/baz.html');

新しいMojo::Pathオブジェクトを構築します。必要であれパスを解析します。

parse

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

パスを解析します。

to_abs_string

my $str = $path->to_abs_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/]);

パスのパーツ。 このメソッドはパスをノーマライズし、 %2Fはセキュリティ的な理由のために、 /として扱われることに注意してください。

# スラッシュつきの部分
push @{$path->parts}, 'foo/bar';

to_dir

my $dir = $route->to_dir;

パスを複製し、一番右のスラッシュの後のすべてを削除します。

# "/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;

パスをルートに変更します。

# "/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;

パスを文字列に変換します。

# "/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);

パスは終わりにスラッシュを持ちます。 パスは先頭にスラッシュを持ちます。 このメソッドはパスをノーマライズし、 %2Fはセキュリティ的な理由のために、 /として扱われることに注意してください。

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

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

演算子

Mojo::Pathは次の演算子をオーバーロードしています。

配列

my @parts = @$path;

partsのエイリアス。これはパスを正規化し、セキュリティ上の理由のために%2F/として 扱われることに注意してください。

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

真偽値

my $bool = !!$path;

いつでも真

文字列化

my $str = "$path";

to_stringのエイリアス。

参考

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

(Mojolicious 8.12を反映。2019年5月23日更新)

関連情報