我需要在Perl脚本中构建一个文件路径。我应该使用哪个路径分隔符来允许我的脚本在Windows和Unix上运行?
请记住,Windows需要驱动器号。
答案 0 :(得分:12)
您想要File::Spec的catpath
:
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::Spec。 Unix,Win32和MacOS以及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