パスを分割したいのですが、誰か助けてもらえますか?
私の入力は次のとおりです。
$getpath = "/u/project/path/file.name";
/u/project/path
ある変数と別の変数に分割したいfile.name
。
File::Basenameは、必要な情報を抽出するのに役立ちます (コア モジュールの一部です)。
my($filename, $directories, $suffix) = fileparse($path);
まず第一に、CPAN で検索してみてください。次に、File::Spec モジュールを使用することをお勧めします。例えば:
use File::Spec;
($volume,$directories,$file) = File::Spec->splitpath( $path );
$directories は "/u/project/path" になり、$file は "file.name" になります。
File::Spec モジュールは、Unix(Linux)、Mac、Win32、OS2、VMS の 5 つのオペレーティング システムに対応しています。また、このモジュールは、catpath、updir、file_name_is_absolute などの他のファイル操作も多数提供します。別のシステムでコードを変更する必要はありません。
参照:ファイル::スペック
my $getpath = "/u/project/path/file.name";
my @arr=split /\//,$getpath;
my $filename=$arr[(scalar(@arr))-1]; #will give you the filename
my $path_no_filename= join "/",@arr[0..(scalar(@arr)-2)]; #will give everything except the filename
my($path, $file) = $getpath =~ m{(.+)/([^/]+)$};
このための素晴らしいクロスプラットフォーム モジュールもあります。 Path::TinyとFile::Specを参照してください。
my $f = Mojo::File->new($getpath);
print($f->dirname, "::", $f->basename);
クイックテスト:
> perl -Mojo -E 'my $f = f("/u/project/path/file.name"); say $f->dirname, "::", $f->basename'
/u/project/path::file.name