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

获取perl中最顶层路径元素的有效方法,perl,Perl,有 需要使用(一)个前导斜杠=/square获取第一个元素,或者只有/是$path为空或只包含斜杠 目前有两种解决方案,例如: my $path = "//strange/path/"; 我不喜欢它们中的任何一个,因为1.st使用module,而第二个中的3个正则表达式非常难看 是否存在更有效的| | | | | | |“更好”的方法?如果需要正则表达式,可以尝试以下“一个正则表达式”解决方案: use 5.014; use warnings; use File::Spec; my $path

需要使用(一)个前导斜杠=
/square
获取第一个元素,或者只有
/
是$path为空或只包含斜杠

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

my $path = "//strange/path/";
我不喜欢它们中的任何一个,因为1.st使用module,而第二个中的3个正则表达式非常难看


是否存在更有效的| | | | | | |“更好”的方法?

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

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;
使用5.014;
使用警告;
while(){
咀嚼;
我的$o=我的$n=$\;
$n=~s:(^/*)([^/]*)?(/*.*):/$2:;
说“=$o==$n=”;
}
__资料__
/
//
奇怪的
奇怪的/
奇怪/路径
/奇怪的
/奇怪的/
/奇怪/路径
//奇怪的
//奇怪的/
//奇怪/路径
//奇怪的//
//奇怪的//
//奇径

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

就我个人而言,我喜欢使用模块的方式,特别是如果它是像
File::Spec
这样的标准模块。您可以合理地确定代码已经过数千名用户的测试并证明有效(与您自己自备的正则表达式不同,
File::Spec
提供了自动跨平台功能。好的,将使用File::Spec.;)接受这个作为唯一的答案。
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