我需要将当前目录的尾部放入变量中。我可以做一个:
use Cwd; my $dir = getcwd;
要获取的完整路径,请执行以下操作:usr\bjm\scPDB_entries\4dpt,但我真正需要的是将4dpt从路径的其余部分中分离出来。
usr\bjm\scPDB_entries\4dpt
4dpt
camsedfj1#
File::Basename
use File::Basename qw(basename); print basename($dir), "\n";
iezvtpos2#
最好使用File::Spec,特别是当需要跨平台工作时。File::Basename的文档是这样说的。如果您关心的只是解析路径,那么使用File::Spec的splitpath()和splitdir()方法会更安全。这个程序按你的要求做
File::Spec
use strict; use warnings; use File::Spec; my $cwd = File::Spec->rel2abs; my @path = File::Spec->splitdir($cwd); my $dir = $path[-1]; print $dir;
它之所以冗长,主要是因为File::Spec的面向对象特性。帮助模块File::Spec::Functions允许您通过将类方法作为本地子例程导入来使其更加简洁。
File::Spec::Functions
use strict; use warnings; use File::Spec::Functions qw/ rel2abs splitdir /; my $dir = (splitdir(rel2abs))[-1]; print $dir;
2条答案
按热度按时间camsedfj1#
File::Basename
iezvtpos2#
最好使用
File::Spec
,特别是当需要跨平台工作时。File::Basename
的文档是这样说的。如果您关心的只是解析路径,那么使用File::Spec的splitpath()和splitdir()方法会更安全。
这个程序按你的要求做
它之所以冗长,主要是因为
File::Spec
的面向对象特性。帮助模块File::Spec::Functions
允许您通过将类方法作为本地子例程导入来使其更加简洁。