perl - 获取perl中最顶层路径元素的有效方法

标签 perl

my $path = "//strange/path/";

需要获取带有(一个)前导斜杠的第一个元素 = /strange 或只有 / 是 $path 为空或仅包含斜杠。

目前有两种解决方案,例如:

use 5.014;
use warnings;
use File::Spec;
my $path = "//strange/path/";

#version with File::Spec
my $v1 = "/" . ([grep {/./} File::Spec->splitdir($path)]->[0] //  "");
say $v1;

#regex
my $v2 = $path;
$v2 =~ s{^/*}{};
$v2 =~ s{/.*}{};
$v2 =~ s{^}{/};
say $v2;

我都不喜欢它们中的任何一个,因为第一个使用模块,第二个中的 3 个正则表达式简直丑陋。

存在更有效||最快|| “更好”的方法?

最佳答案

如果你想要正则表达式,你可以尝试下面的“一个正则表达式”解决方案:

use 5.014;
use warnings;
while(<DATA>) {
    chomp;
    my $o = my $n = $_;
    $n =~ s:(^/*)([^/]*)?(/*.*):/$2:;
    say "=$o= =$n=";
}
__DATA__

/
//
strange
strange/
strange/path
/strange
/strange/
/strange/path
//strange
//strange/
//strange/path
//strange//
//strange//
//strange//path

但正如上面@Moritz Bunkus 所说 - 最好使用标准的 File::Spec。

关于perl - 获取perl中最顶层路径元素的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12197630/

相关文章:

perl - 如何在 Mojo::Log 中显示当前用户的信息

perl - 在 Perl 中使用原型(prototype)在子例程 args 上声明数组引用上下文是一件好事吗?

perl - CSV 格式不正确?

perl - 退出时删除文件

mysql - Perl DBD::MySQL execute 不支持 limit 关键字后的字符串参数。始终被视为数字

perl - 如何一个接一个地运行后台进程

perl - 如何在 Perl 条件中检测无法访问的代码,它总是评估为假?

linux - 如何将 perl-mode.el 添加到 .emacs?

android - 有什么方法可以加快monkeyrunner脚本的执行速度吗?

perl - Perl 代码中的依赖关系