有无
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;
我不喜欢它们中的任何一个,因为1.st使用模块,而第二个中的3个正则表达只是丑陋。
存在更有效||最快|| “更好”的方法?
答案 0 :(得分:2)
如果您想要正则表达式,可以尝试以下“一个正则表达式”解决方案:
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。