我正在使用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} p>
答案 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中,每个驱动器都有自己的当前目录。)