如何在Perl中打印相对路径的文件夹?

时间:2012-10-27 14:13:42

标签: perl directory

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

说我正在执行:

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

e.g。 1

如果他们输入:

../../

我希望它能够返回'b'(或绝对路径到b,我可以编写一个脚本来删除它)。

e.g.2

如果他们输入:

./

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

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

由于

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分: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提供了无法解析符号链接的函数,如果你喜欢的话。