如何在 Perl 正则表达式匹配中测试捕获是否定义?
#!/usr/bin/env perl
use v5.10;
my $str="foobar
barfoo";
while($str =~ m/(?:(f.*))|(?:(b.*))/g) {
say "+ $1";
say "- $2";
}
输出
+ foobar
-
+
- barfoo
而我想要的是
+ foobar
- barfoo
即如果 $1
或 $2
不匹配,则不应打印。
最佳答案
问题是你没有测试它是否已定义,所以它会以任何一种方式打印 +/-。
while($str =~ m/(?:(f.*))|(?:(b.*))/g) {
say "+ $1" if defined($1);
say "- $2" if defined($2);
}
https://stackoverflow.com/questions/8918939/