Perl:File :: Spec-> canonpath($ path)如何工作

时间:2016-01-23 11:18:39

标签: perl

这种方法在做什么?

我根本不理解它的目的,而perldoc中的解释并没有帮助我。

现在我需要更新使用此方法的脚本,因此最好了解它正在做什么。

是否有一个简单的教程来理解该方法?

谢谢

2 个答案:

答案 0 :(得分:4)

canonpath的调用会返回与传递的参数等效的规范路径。这意味着它将

  • 将所有路径分隔符更改为平台常规路径分隔符

  • 将多个路径分隔符压缩为单个

  • 删除尾随路径分隔符

  • 删除任何多余的...路径元素

使用类似

的Windows路径可以最好地证明这一点
C:/a/b/../c///d/.//

此Perl代码

use strict;
use warnings;
use feature 'say';

use File::Spec;

say File::Spec->canonpath('C:/a/b/../c///d/.//');

输出

C:\a\c\d

很遗憾,我无法解释您展示的代码

my $dir  = File::Spec->curdir();
my $path = File::Spec->canonpath($dir);

因为curdir方法在Windows和Linux系统上返回.canonpath保持不变。如果您想要发现当前目录的绝对路径,那么您将使用

my $path = File::Spec->rel2abs(File::Spec->curdir());

然而,使用像此{/ 3>这样的Cwd模块可以做得更好

use Cwd ();

my $path = Cwd::cwd;

答案 1 :(得分:1)

curdir返回当前工作目录的符号。 canonpath在不同的操作系统上执行不同的操作,请查看示例File::Spec::UnixFile::Spec::Win32