Mojo::File - ファイルシステムのパス
使い方
use Mojo::File;
# ポータブルにファイルシステムのパスを扱う
my $path = Mojo::File->new('/home/sri/.vimrc');
say $path->slurp;
say $path->dirname;
say $path->basename;
say $path->sibling('.bashrc');
# もう一つのコンストラクタを使う
use Mojo::File 'path';
my $path = path('/tmp/foo/bar')->make_path;
$path->child('test.txt')->spurt('Hello Mojo!');
説明
Mojo::Fileは、ファイルシステムのパスのためのスカラベースのコンテナで、異なるオペレーティングシステムのを扱うためのフレンドリーなAPIを提供します。
# パスを処理するために直接スカラにアクセスする
my $path = Mojo::File->new('/home/sri/test');
$$path .= '.txt';
関数
Mojo::File次の関数を実装しており、個別にインポートできます。
path
my $path = path;
my $path = path('/home/sri/.vimrc');
my $path = path('/home', 'sri', '.vimrc');
my $path = path(File::Temp->newdir);
スカラーベースの新しいMojo::Fileオブジェクトを構築します。デフォルトは、現在のワーキングディレクトリです。
# "foo/bar/baz.txt" (on UNIX)
path('foo', 'bar', 'baz.txt');
tempdir
my $path = tempdir;
my $path = tempdir('tempXXXXX');
File::Tempを使って一時ディレクトリのための、新しいスカラベースのMojo::Fileオブジェクトを構築します。
# 長いバージョン
my $path = path(File::Temp->newdir('tempXXXXX'));
tempfile
my $path = tempfile; my $path = tempfile(DIR => '/tmp');
File::Tempを使って一時ファイルのための、新しいスカラベースのMojo::Fileオブジェクトを構築します。
# 長いバージョン my $path = path(File::Temp->new(DIR => '/tmp'));
メソッド
Mojo::File implements the following methods.
basename
my $name = $path->basename;
my $name = $path->basename('.txt');
L<File::Basename>を使って、パスの最後のレベルを返します。
# ".vimrc" (on UNIX)
path('/home/sri/.vimrc')->basename;
# "test" (on UNIX)
path('/home/sri/test.txt')->basename('.txt');
child
my $child = $path->child('.vimrc');
パスからの相対を表現する新しいMojo::Fileオブジェクトを返します。
# "/home/sri/.vimrc" (on UNIX)
path('/home')->child('sri', '.vimrc');
chmod
$path = $path->chmod(0644);
ファイルのパーミッションを変更します。
copy_to
my $destination = $path->copy_to('/home/sri');
my $destination = $path->copy_to('/home/sri/.vimrc.backup');
File::Copyを使ってファイルをコピーし、コピー先をMojo::Fileオブジェクトとして返します。
dirname
my $name = $path->dirname;
File::Basenameを使って、パスの最後のレベルを除いたすべてを、Mojo::Fileオブジェクトとして返します。
# "/home/sri" (on UNIX)
path('/home/sri/.vimrc')->dirname;
is_abs
my $bool = $path->is_abs;
パスが絶対かチェックします。
# True (on UNIX)
path('/home/sri/.vimrc')->is_abs;
# False (on UNIX)
path('.vimrc')->is_abs;
list
my $collection = $path->list;
my $collection = $path->list({hidden => 1});
ディレクトリの中にあるすべてのファイルをリストし、Mojo::Fileオブジェクトとして結果を含む、Mojo::Collectionオブジェクトを返します。このリストは.を含みません。
# ファイルをリストする
say for path('/home/sri/myapp')->list->each;
次のオプションがが現在利用可能です。
list_tree
my $collection = $path->list_tree;
my $collection = $path->list_tree({hidden => 1});
ディレクトリの中にあるすべてのファイルを再帰的にリストし、Mojo::Fileオブジェクトとして結果を含む、Mojo::Collectionオブジェクトを返します。このリストは.と..を含みません。
# すべてのテンプレートを取得
say for path('/home/sri/myapp/templates')->list_tree->each;
次のオプションがが現在利用可能です。
- dir
-
dir => 1
ディレクトリを含む
- dont_use_nlink
-
dont_use_nlink => 1
File::Findがいつでもディレクトリをstatできるように強制します。
- hidden
-
hidden => 1
隠しファイルと隠しディレクトリを含む
- max_depth
-
max_depth => 3
ファイル検索するときに下りてゆく最大のレベル
lstat
my $stat = $path->lstat;
シンボリックリンクのためのFile::statオブジェクトを返します。
# シンボリックリンクのサイズを取得
say path('/usr/sbin/sendmail')->lstat->size;
# シンボリックリンクの修正時刻を取得
say path('/usr/sbin/sendmail')->lstat->mtime;
make_path
$path = $path->make_path;
$path = $path->make_path({mode => 0711});
まだ存在していない場合、複数階層のディレクトリを作成します。追加の引数はFile::Pathに渡されます。
move_to
my $destination = $path->move_to('/home/sri');
my $destination = $path->move_to('/home/sri/.vimrc.backup');
File::Copyでファイルを移動し、移動先としてMojo::Fileオブジェクトを返します。
new
my $path = Mojo::File->new;
my $path = Mojo::File->new('/home/sri/.vimrc');
my $path = Mojo::File->new('/home', 'sri', '.vimrc');
my $path = Mojo::File->new(File::Temp->new);
my $path = Mojo::File->new(File::Temp->newdir);
新しいMojo::Fileオブジェクトを返します。デフォルトは、現在のワーキングディレクトリが使われます。
# "foo/bar/baz.txt" (on UNIX)
Mojo::File->new('foo', 'bar', 'baz.txt');
open
my $handle = $path->open('+<');
my $handle = $path->open('r+');
my $handle = $path->open(O_RDWR);
my $handle = $path->open('<:encoding(UTF-8)');
IO::Fileでファイルをオープンします。
# "fcntl.h" の定数も使う
use Fcntl qw(O_CREAT O_EXCL O_RDWR);
my $handle = path('/home/sri/test.pl')->open(O_RDWR | O_CREAT | O_EXCL);
realpath
my $realpath = $path->realpath;
Cwdでパスを解決し、結果をMojo::Fileオブジェクトとして返します。
remove
$path = $path->remove;
ファイルを削除します。
remove_tree
$path = $path->remove_tree;
$path = $path->remove_tree({keep_root => 1});
ディレクトリとサブディレクトリに含まれるファイルを削除します。追加の引数はFile::Pathに渡されます。
sibling
my $sibling = $path->sibling('.vimrc');
パスのディレクトリの部分への相対で、新しいMojo::Filオブジェクトを返します。
# "/home/sri/.vimrc" (on UNIX)
path('/home/sri/.bashrc')->sibling('.vimrc');
# "/home/sri/.ssh/known_hosts" (on UNIX)
path('/home/sri/.bashrc')->sibling('.ssh', 'known_hosts');
slurp
my $bytes = $path->slurp;
ファイルからすべてのデータを読み込みます。
spurt
$path = $path->spurt($bytes); $path = $path->spurt(@chunks_of_bytes);
ファイルへすべてのデータを書き出します。
stat
my $stat = $path->stat;
パスのためのFile::statオブジェクトを返します。
# ファイルサイズを取得
say path('/home/sri/.bashrc')->stat->size;
# ファイルの修正時刻を取得
say path('/home/sri/.bashrc')->stat->mtime;
tap
$path = $path->tap(sub {...});
Mojo::Baseの"tap"のエイリアス。
to_abs
my $absolute = $path->to_abs;
絶対パスをMojo::Fileオブジェクトとして返します。パスはファイルシステムに存在する必要はありません。
to_array
my $parts = $path->to_array;
ディレクトリセパレータでパスを分割します。
# "home:sri:.vimrc" (on UNIX)
join ':', @{path('/home/sri/.vimrc')->to_array};
to_rel
my $relative = $path->to_rel('/some/base/path');
オリジナルパスから行き先のパスへの相対パスを、Mojo::Fileオブジェクトとして返します。
# "sri/.vimrc" (on UNIX)
path('/home/sri/.vimrc')->to_rel('/home');
to_string
my $str = $path->to_string;
パスを文字列化します。
touch
$path = $path->touch;
存在しなければ、ファイルを作成し、そうでない場合は、修正時刻とアクセス時刻を現在の時間に更新します。
# 安全なファイルの読み込み
say path('.bashrc')->touch->slurp;
with_roles
my $new_class = Mojo::File->with_roles('Mojo::File::Role::One');
my $new_class = Mojo::File->with_roles('+One', '+Two');
$path = $path->with_roles('+One', '+Two');
Mojo::Baseの"with_roles"のエイリアス。
演算子
Mojo::Fileは次の演算子をオーバーライドしています。
array
my @parts = @$path;
"to_array"のエイリアス。
bool
my $bool = !!$path;
いつでも真。
stringify
my $str = "$path";
"to_string"のエイリアス
参考
Mojolicious, Mojolicious::Guides, https://mojolicious.org.
(Mojolicious 8.12。2019年5月16日更新)
Mojoliciousドキュメント日本語訳