如何在 Perl 中获取目录(文件路径)分隔符?

问题描述 投票:0回答:4

对于 Java,我们可以使用

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

Perl 中有类似的方法吗?我只想找到一个 dir,直接子目录。 假设我有两个论点

$a
$b
;我根据路径分隔符拆分第一个并再次加入它,除了最后一个片段并与第二个参数进行比较。

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

perl path generics separator
4个回答
26
投票

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

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

12
投票

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

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

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


9
投票

您可以在 File::Util 中使用 SL 常数。


0
投票

在File::Spec之前,我用的是这个。它今天仍然有效,并且在我遇到过的每一个类 Unix 和 Windows 平台上都适用于非常古老的 perls。

基本上,这个想法是询问 perl 它使用什么作为目录分隔符 char:

$dirSep = ( $ENV{"PATH"} =~ m/;[a-z]:\\/i ) ? '\\' : '/' ; 
print $dirSep;
© www.soinside.com 2019 - 2024. All rights reserved.