以下脚本执行我想要的操作,但它会使错误的连接两行额外的正则表达式。
第一个/
之前的部分长度可以是任意长度,所以我不认为我可以使用substr()
......
问题
是否可以避免两个额外的正则表达式行并在if条件下执行?
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $a = "tank5/a/b";
my $b = "pool/a/b";
$a = $1 if $a =~ qr{.+?/(.+)};
$b = $1 if $b =~ qr{.+?/(.+)};
if ($a eq $b) {
print "same\n";
}
答案 0 :(得分:4)
你可以尝试:
print "same\n" if (last_part($a) eq last_part($b));
sub last_part { $_[0] =~ s{^.*?/}{/}r }
如果你没有5.14+,你必须使用一些有点儿的东西。
sub last_part { my ($s) = @_; $s =~ s{^.*?/}{/}; $s }
答案 1 :(得分:0)
第一个/之前的部分长度可以是任何长度,所以我 不要以为我可以使用substr()...
你可以:
use strict;
use warnings;
use 5.016;
my $a = "tank5/a/b";
my $b = "pool/a/b";
$a = substr $a, (index $a, '/');
say $a;
$b = substr $b, (index $b, '/');
say $b;
--output:--
/a/b
/a/b
使用匹配运算符(m //):
use strict;
use warnings;
use 5.016;
my $a = "tank5/a/b";
my $b = "pool/a/b";
my $regex = qr{
(
\/ #Literal '/', followed by...
.* #Any charcter 0 or more times.
)
}xms;
if ($a =~ $regex) {
my $match_a = $1;
if ($b =~ $regex ) {
my $match_b = $1;
say 'the same' if $match_a eq $match_b;
}
}