给出一个字符串列表/数组(特别是UNIX路径),删除共享部分,例如:
在使用该功能之前,我可能会删除目录,但严格说来不会有太大改变。
我想知道一种删除共享部分(./dir/fileA_)或删除非共享部分的方法。
谢谢您的帮助!
答案 0 :(得分:3)
这有点麻烦,但是如果您不需要支持Unicode字符串(也就是说,如果所有字符的值都小于256),则可以使用xor来获取最长公共前缀的长度。两个字符串:
my $n = do {
($str1 ^ $str2) =~ /^\0*/;
$+[0]
};
您可以循环执行此操作以获取字符串列表的公共前缀:
use v5.12.0;
use warnings;
sub common_prefix {
my $prefix = shift;
for my $str (@_) {
($prefix ^ $str) =~ /^\0*/;
substr($prefix, $+[0]) = '';
}
return $prefix;
}
my @paths = qw(
./dir/fileA_header.txt
./dir/fileA_footer.txt
);
say common_prefix(@paths);
输出:./dir/fileA_