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