2012-10-27 55 views
1

我有一个脚本,需要一个文件夹的相对路径。有没有办法获得指向的文件夹/目录的名称?如果需要,它可能是绝对路径,我将使用正则表达式来剥离它。如何在Perl中打印相对路径的文件夹?

说我执行:

/example/a/b/c/d/perl.pl 

例如1

如果他们输入:

../../ 

我希望它能够返回“B”(或绝对路径直到b,我可以写一个脚本来剥离的话)。

e.g.2

如果他们输入:

./ 

我希望它能够返回 'd'(或再次,绝对路径最多d)。

有没有一种简单的方法来做到这一点,因为我能想到的唯一方法是计算../的数量,并使用它在文件的绝对路径上执行正则表达式,这需要大量的处理。

感谢

回答

5

这很简单 - 只需使用Cwd模块:

use Cwd 'abs_path'; 
my $abs_path = abs_path($file); 
+0

genious。谢谢:) – user1628284

2

相对于脚本执行(按照您的要求):

use Cwd   qw(realpath); 
use File::Basename qw(dirname); 

my $script_dir = dirname(realpath($0)); 
my $abs_path = real_path("$script_dir/$rel_path"); 

相对于当前的工作目录:

use Cwd qw(realpath); 

my $abs_path = realpath($rel_path); 

在这两种情况下,都会解析符号链接。如果你喜欢,File :: Spec提供了不能解析符号链接的函数。

+0

Cwd没有'real_path'函数,有'realpath',它是'abs_path'的同义词:) – Basil

+0

糟糕,固定。我知道它是一些平台上的同义词。但我特别想要realpath的功能。 – ikegami

相关问题