perl - 如何测试是否在 Perl 正则表达式匹配中定义了捕获?

如何在 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/

相关文章:

asp.net-mvc - 我怎样才能通过 LCID 获得文化

google-maps - 谷歌地图标记仅在 iPhone/iPad 上在特定缩放级别消失

css - 使用 CSS 选择类下面的类

python-2.7 - Python None 如果检查失败

php - FOS 用户包安装错误

tsql - 返回 T-SQL 中两个日期之间的月/年

matplotlib - 如何更改 matplotlib 3D 图轴的颜色?

objective-c - 在 objective-c 中获取颜色分量

objective-c - Ada 支持 put_line 中的变量吗?

asp.net-mvc-3 - MVC 3 POST 数据和 Id 字段