如何在Perl中构建与OS无关的文件路径,包括可选的Windows驱动器号?

时间:2009-11-30 06:12:55

标签: windows perl path

我需要在Perl脚本中构建一个文件路径。我应该使用哪个路径分隔符来允许我的脚本在Windows和Unix上运行?

请记住,Windows需要驱动器号。

5 个答案:

答案 0 :(得分:12)

您想要File::Speccatpath

       catpath()
         Takes volume, directory and file portions and returns an entire path.
         Under Unix, $volume is ignored, and directory and file are
         concatenated.  A '/' is inserted if need be.  On other OSes, $volume
         is significant.

             $full_path = File::Spec->catpath( $volume, $directory, $file );

答案 1 :(得分:8)

你想要File::SpecUnixWin32MacOS以及others都有特定版本。

答案 2 :(得分:5)

如果您发现File :: Spec很麻烦,请尝试Path::Class。它为您提供了目录和文件对象,而不必在字符串上调用long winded File :: Spec类方法。

答案 3 :(得分:2)

听起来您正在使用路径分隔符来表示目录/文件名组件之间的字符。但是,如果你的意思是另一个意思:

某些内容(特别是MANPATH或PERL5LIB等环境变量)会获取文件或目录名称列表,并以路径分隔符分隔。 Perl的Config模块可以提供$ Config :: Config {'path_sep'}这样的字符。

答案 4 :(得分:-6)

问:我应该使用哪个路径分隔符来允许我的脚本在Windows和Unix上运行?

答:/。

Explanation:
Windows can work similarly to Unix with / as path separator.
(Mac OS uses : as a path separator instead of /).

The File::Spec modules can also help.

    use File::Spec::Functions;
    chdir(updir());        # go up one directory
    $file = catfile(curdir(), 'temp', 'file.txt');
    # on Unix and Win32, './temp/file.txt'
    # on Mac OS, ':temp:file.txt'
    # on VMS, '[.temp]file.txt'

Source: 
http://www.xav.com/perl/lib/Pod/perlport.html