我真的应该知道这一点,但我主要使用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
?
答案 0 :(得分:7)
perlport
说几乎有关于这个主题的所有内容。也就是说,无法接受/
作为路径分隔符的系统很少见,而且在任何地方忠实使用File::Spec
都可能无法获得那么多。但也要小心区分目录分隔符的内部和外部用途。例如,这将适用于Windows:
open my $fh, '<', 'C:/some/directory/to/some/file';
但这可能不会,因为它需要由Windows shell处理:
system("C:/some/program.exe C:/some/program/argument.txt");