我有一个脚本,它采用文件夹的相对路径。有没有办法获取指向的文件夹/目录的名称?如果需要,它可能是绝对路径,我将使用正则表达式来剥离它。
说我正在执行:
/example/a/b/c/d/perl.pl
e.g。 1
如果他们输入:
../../
我希望它能够返回'b'(或绝对路径到b,我可以编写一个脚本来删除它)。
e.g.2
如果他们输入:
./
我希望它能够返回'd'(或者再次,绝对路径直到d)。
有没有一种简单的方法可以做到这一点,因为我能想到的唯一方法是计算../
的数量并使用它来对文件的绝对路径进行正则表达式,这需要很多处理
由于
答案 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提供了无法解析符号链接的函数,如果你喜欢的话。