Perl处理目录分隔符

Dav*_* W. 9 perl file-io

我真的应该知道这一点,但我主要使用Linux,Mac OS X和Windows,它们都使用正斜杠(/)作为目录分隔符(Windows可以使用\或者/.).

这意味着当我通常在Perl中编写程序时,我可以简单地/用作目录分隔符,一切都很好.但是,我知道File::Spec假设允许文件分隔符的可移植性(无论这意味着什么).

如果我在一个不使用正斜杠作为目录分隔符的系统上,我理解用户希望能够使用默认分隔符输入文件,并使用默认分隔符查看输出.(例如,一个Windows用户将输入和输出期望是C:\Users\smith\Documents和不是C:/Users/smith/Documents),但到底是什么Perl的内部吗?

尽管平台可以用作目录分隔符,但我可以在内部处理文件时使用正斜杠.例如,我有一个目录$dir和一个名为的文件$file,我想打开该文件.我可以简单地说$dir/file,还是我必须使用File::Spec为我连接名称?

事实上,Perl程序是否需要在目录名中使用正斜杠?我正在编写一个模块,并将文件名传递给调用程序.我应该提供文件,/foo/bar/fubar或者如果系统使用像早期Macintosh操作系统那样的冒号,比如说:foo:bar:fubar

mob*_*mob 7

perlport几乎所有关于这个主题的内容都说.也就是说,不能接受/作为路径分隔符的系统是罕见的,并且你可能没有那么多从File::Spec忠实地使用到处获得.但也要小心区分目录分隔符的内部和外部用途.例如,这将适用于Windows:

open my $fh, '<', 'C:/some/directory/to/some/file';
Run Code Online (Sandbox Code Playgroud)

但这可能不会,因为它需要由Windows shell处理:

system("C:/some/program.exe C:/some/program/argument.txt");
Run Code Online (Sandbox Code Playgroud)