【问题标题】:How can I get the directory (file path) separator in Perl?如何在 Perl 中获取目录(文件路径)分隔符?
【发布时间】:2011-02-23 05:56:52
【问题描述】:

在 Java 的情况下,我们可以使用

获取路径分隔符
System.getProperty("path.separator");

Perl 中有类似的方法吗?我要做的就是找到一个 dir,立即子目录。 假设我得到了两个参数$a$b;我根据路径分隔符拆分第一个并再次加入它,除了最后一个片段并与第二个参数进行比较。

问题是我的代码必须是通用的,为此我需要知道系统相关的路径分隔符是什么?

【问题讨论】:

  • 为了搜索引擎的利益:这个问题和答案实际上处理目录分隔符(通常是斜杠或反斜杠)。路径分隔符是不同的东西(通常是冒号或分号),用途不同,由use Config; $Config{path_sep}返回。
  • @daxim - 我编辑了标题,希望它现在不那么模棱两可了
  • 在 Perl 和 Java 中,正斜杠 / 可以在 Windows 上工作,就像在 linux/unix/mac 上一样。对于源自 unix 的大量命令行工具(如 Ghostscript 和 TeX)也是如此。所以大多数时候你不需要知道路径分隔符。

标签: perl path generics separator


【解决方案1】:

您不应该手动形成文件路径 - 而是使用 File::Spec 模块:

($volume, $directories,$file) = File::Spec->splitpath( $path );
@dirs = File::Spec->splitdir( $directories );
$path = File::Spec->catdir( @directories );
$path = File::Spec->catfile( @directories, $filename );

【讨论】:

  • 别忘了 splitdir。使用路径的一种更优雅的方式是 CPAN 提供的 Path::Class。
  • @Schwern - 我对推荐 Path::Class 感到不舒服,因为我自己从未使用过它......但我在 SO 的其他地方看到了它的推荐,所以我会检查一下。关于 splitdir 的好点 - 虽然我担心如果我继续下去,答案会变成 POD 的复制/粘贴 :)
  • Path::Class 很棒,比其他替代品更容易使用。
  • 这确实没有回答这个问题:如何使用 Perl 获取本机路径分隔符?而且它听起来肯定像 File::Spec 应该有一个方法,因为它肯定知道它,但它不知道。
  • @Trutane - 可能是因为 Perl 在创建时是基于 Unix 的,并且当时还没有不同的路径分隔符。 Python 和 Java 都诞生于 Windows+Unix 世界。只是我的猜测,我没有任何证据支持。
【解决方案2】:

接受的答案解决了你真正的问题,但如果你真的想要得到分隔符(仅使用 perl 核心模块):

my $sep = File::Spec->catfile('', '');

这将两个空文件名与当前系统的分隔符连接起来,只留下分隔符。

【讨论】:

    【解决方案3】:

    您可以使用SL constant in File::Util

    【讨论】:

      猜你喜欢
      • 2014-01-16
      • 2012-04-12
      • 2013-12-22
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      相关资源
      最近更新 更多