![](/img/trans.png)
[英]How to get only a filename (not full path) into $1, using the PERL, regular expressions
[英]How to split a path in perl with full filename?
我想分開一條路有人可以幫助我嗎?
我的輸入是:
$getpath = "/u/project/path/file.name";
我想在一個變量中拆分/u/project/path
在另一個變量中file.name
。
File::Basename可以幫助您提取您需要的信息(並且是核心模塊的一部分)
my($filename, $directories, $suffix) = fileparse($path);
首先,有很多perl模塊可以做你想做的,嘗試在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。 該模塊還提供了大量其他文件操作,如 catpath、updir、file_name_is_absolute 等。您無需在不同系統上更改代碼。
參考:文件::規范
my($path, $file) = $getpath =~ m{(.+)/([^/]+)$};
也有很好的跨平台模塊,請參閱Path::Tiny和File::Spec 。
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 $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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.