如何使用完整文件名拆分perl中的路径?

时间:2013-04-12 07:41:40

标签: perl path split

我想分开一条路可以有人帮助我吗?

我的意见是:

$getpath = "/u/project/path/file.name";

我想在一个变量中分割/u/project/path,在其他变量中分割file.name

5 个答案:

答案 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::TinyFile::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