我想分开一条路可以有人帮助我吗?
我的意见是:
$getpath = "/u/project/path/file.name";
我想在一个变量中分割/u/project/path
,在其他变量中分割file.name
。
答案 0 :(得分:9)
File::Basename可以帮助您提取所需的信息(并且是核心模块的一部分)
my($filename, $directories, $suffix) = fileparse($path);
答案 1 :(得分:4)
首先,有很多perl模块可以做你想做的事,尝试在CPAN上搜索。 其次,我建议使用File :: Spec模块。例如:
use File::Spec;
($volume,$directories,$file) = File::Spec->splitpath( $path );
然后$目录将是“/ u / project / path”,$ file将是“file.name”。
File :: Spec模块有五种操作系统:Unix(Linux),Mac,Win32,OS2,VMS。 此模块还提供了大量其他文件操作,如catpath,updir,file_name_is_absolute等。 您无需在不同系统上更改代码。
参考:File::Spec
答案 2 :(得分:1)
my($path, $file) = $getpath =~ m{(.+)/([^/]+)$};
还有很好的跨平台模块,请参阅Path::Tiny和File::Spec。
答案 3 :(得分:1)
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
答案 4 :(得分:0)
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