如何在Perl中构build与操作系统无关的文件path,包括可选的Windows驱动器盘符?

我需要在Perl脚本中构build一个文件path。 我应该使用哪个path分隔符来允许脚本在Windows和Unix上工作?

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

Solutions Collecting From Web of "如何在Perl中构build与操作系统无关的文件path,包括可选的Windows驱动器盘符?"

你想要File :: Spec的catpath

        catpath()
         获取卷,目录和文件部分并返回整个路径。
         在Unix下,$ volume被忽略,目录和文件都是
         级联。 如果需要,插入“/”。 在其他操作系统,$卷
         意义重大。

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

你想要File :: Spec 。 Unix , Win32和MacOS以及其他版本都有特定的版本。

如果您发现File :: Spec繁琐,那么请尝试Path :: Class 。 它使您可以使用目录和文件对象,而不必在字符串上调用冗长的File :: Spec类方法。

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

有些东西(特别是像MANPATH或PERL5LIB这样的环境变量)需要一个由路径分隔符分隔的文件或目录名称列表。 Perl的Config模块可移植地提供$ Config :: Config {'path_sep'}这样的字符。

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

一个: /。

说明:
 Windows可以像Unix一样使用/作为路径分隔符。
 (Mac OS使用:作为路径分隔符而不是/)。

 File :: Spec模块也可以提供帮助。

    使用File :: Spec :: Functions;
     CHDIR(updir());  #上去一个目录
     $ file = catfile(curdir(),'temp','file.txt');
     #在Unix和Win32上,'./temp/file.txt'
     #在Mac OS上,':temp:file.txt'
     #在VMS上,'[.temp] file.txt'

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