【问题标题】:Perl Handling Directory SeparatorsPerl 处理目录分隔符
【发布时间】:2011-12-12 21:57:07
【问题描述】:

我真的应该知道这一点,但我主要使用 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 OS 等冒号,例如:foo:bar:fubar

【问题讨论】:

  • 你打算用这些路径做什么?如果是用于读写文件,那么/ 就可以了,perl 会按照你的意思去做。如果您正在制作由主机的命令外壳或该系统上的其他程序解析的命令,那么您将需要遵守该平台的规则,File::Spec 可以提供帮助。

标签: perl file-io


【解决方案1】:

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");

【讨论】:

  • 感谢 Perlport 的链接。我确实学到了一些关于 unlink 和 VMS 的东西,这很有趣。我的程序正在将文件/目录名称返回给调用程序,所以我不太担心外部名称,但我可能会添加该选项。
猜你喜欢
  • 1970-01-01
  • 2019-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多