File :: Spec-> catpath不适用于Windows

时间:2015-08-28 17:30:19

标签: windows perl path

我正在使用File::Spec module这样的

my $volume = 'C';

my $path = File::Spec->catpath(
    $volume,
    File::Spec->catdir('panel', 'texts'),
    'file'
);

print $path;

输出

Cpanel\texts\file

File::Spec C:\如何在How can I construct OS-independent file paths in Perl ...?中讨论,如果我必须将卷编写为C而不仅仅{{1}}才能使其正确?

1 个答案:

答案 0 :(得分:6)

你有两个问题。第一个是Windows卷名包括冒号,所以你应该说$volume = 'C:'。第二个是您指定了相对路径,因此您获得了相对路径。如果你想要一个绝对路径,你必须给一个:

use 5.010;
use File::Spec;

my $volume = 'C:';
my $path = File::Spec->catpath($volume,
    File::Spec->catdir('', 'panel', 'texts'), 'file');
say $path;

在Windows上,将打印C:\panel\texts\file,在Unix上会显示/panel/texts/file

请注意,在Windows上拥有带卷名的相对路径是完全合法的:

File::Spec->catpath('C:',
    File::Spec->catdir('panel', 'texts'), 'file');

将为您提供C:panel/texts/file,这意味着panel/texts/file相对于驱动器C:上的当前目录。 (在Windows中,每个驱动器都有自己的当前目录。)