4

我想分道扬镳,谁能帮帮我?

我的输入是:

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

我想拆分/u/project/path一个变量和file.name另一个变量。

4

5 回答 5

9

File::Basename可以帮助您提取所需的信息(并且是核心模块的一部分)

  my($filename, $directories, $suffix) = fileparse($path);
于 2013-04-12T07:51:17.137 回答
7

首先,有很多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 等。您无需在不同系统上更改代码。

参考:文件::规范

于 2013-04-12T08:38:46.657 回答
2
my($path, $file) = $getpath =~ m{(.+)/([^/]+)$};

也有很好的跨平台模块,请参阅Path::TinyFile::Spec

于 2013-04-12T07:45:39.627 回答
2
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
于 2013-04-12T07:47:23.323 回答
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
于 2020-06-29T10:52:58.663 回答