Perl:Regex / File :: Basename

时间:2013-02-10 13:46:45

标签: perl

use File::Basename;
my $path = "a/b/c/d";
my $dirpath = basename ($path);
my $basepath = dirname ($path);
my $base_basepath = dirname ($basepath);
my $dir_dirpath = basename ($basepath);
print "$dir_dirpath/$dirpath\n";

我想要打印c / d(即列表dir / filename)。以上是最好的方法吗?上面显然有效,但我不知何故不喜欢它。有没有更好/更酷/更有效的方法呢?像正则表达式匹配的东西??

实际上,该程序只是我真正希望它做的一部分。这些是不同的用例以及预期的结果:

a/b/c/d => c/d d
b/c/d => c/d d
/c/d => c/d d
c/d => c/d d
/d => d
d => d

1 个答案:

答案 0 :(得分:2)

File::Spec模块是操作文件路径的规范且可移植的方式,并且 File::Spec::Functions允许直接访问该模块的功能,而无需在任何地方为File::Spec->添加前缀。

use strict;
use warnings;

use File::Spec::Functions qw/ splitdir catdir /;

my $path = "a/b/c/d";
my @path = splitdir $path;
print catdir @path[-2,-1];

<强>输出

c/d