Perl处理目录分隔符

Perl处理目录分隔符,perl,file-io,Perl,File Io,我真的应该知道这一点,但我主要使用Linux、Mac OS X和Windows,它们都使用正斜杠(/)作为目录分隔符(Windows可以使用\或/) 这意味着当我通常用Perl编写程序时,我可以简单地使用/作为目录分隔符,一切都很好。然而,我知道File::Spec应该允许文件分隔符的可移植性(不管这意味着什么) 如果我所在的系统不使用正斜杠作为目录分隔符,我知道用户希望能够使用默认分隔符输入文件,并使用默认分隔符查看输出。(例如,Windows用户将输入并期望输出是C:\Users\smith

我真的应该知道这一点,但我主要使用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

几乎说明了关于这个主题的所有内容。也就是说,不能接受
/
作为路径分隔符的系统很少,而且您可能不会从到处忠实地使用
File::Spec
中获得太多好处。但也要注意区分目录分隔符的内部和外部用途。例如,这将在Windows上工作:

open my $fh, '<', 'C:/some/directory/to/some/file';

你打算怎么处理这些小路?如果它是用于读取和写入文件的,那么
/
就可以了,perl将按照您的意思执行。如果您正在制作要由主机的命令shell或该系统上的其他程序解析的命令,那么您需要遵守该平台的规则,File::Spec可以提供帮助。感谢指向Perlport的链接。我确实学到了一些关于
取消链接
和虚拟机的非常有趣的东西。我的程序将文件/目录名返回给调用程序,因此我不太担心外部名称,但我可能会添加该选项。
system("C:/some/program.exe C:/some/program/argument.txt");