条件正则表达式捕获,来自grepping哈希数组

Nam*_*una 1 regex perl if-statement

给定以下匿名哈希数组:

$fields_dump = [
    {
        'DEFAULT_FIELD_LABEL' => 'telco_hier_building',
        'APPROVER_ORDER' => '0',
        'IS_READONLY' => '0',
        'FORM_ID' => '3913',
        'REFERENCE' => 'building',
    },
    {
        'DEFAULT_FIELD_LABEL' => 'Request Type',
        'APPROVER_ORDER' => '0',
        'IS_READONLY' => '0',
        'FORM_ID' => '3913',
        'REFERENCE' => 'request_type',

    },
    {
        'DEFAULT_FIELD_LABEL' => 'Request Completion Date',
        'APPROVER_ORDER' => '0',
        'IS_READONLY' => '0',
        'FORM_ID' => '3913',
        'REFERENCE' => 'request_completion_date',
    },
Run Code Online (Sandbox Code Playgroud)

我想有条件地grep数组DEFAULT_FIELD_LABEL的值为telco_hier_building或者telco_imac_building.当它成功时,我需要提取到匹配值的第二个下划线.

我使用以下代码:

if  ( grep { $_->{DEFAULT_FIELD_LABEL} =~ m/(telco_hier_|telco_imac_)building/ } @$fields_dump ) {
    my $telco_prefix = $1;
    ...
}
Run Code Online (Sandbox Code Playgroud)

条件触发器正确,但正则表达式$1赋值是空白的,在此示例中,它应该是telco_hier_.

我究竟做错了什么?

too*_*lic 6

匹配范围限定为grep {}代码块.您可以使用for循环代替:

use warnings;
use strict;

my $fields_dump = [
    {
        'DEFAULT_FIELD_LABEL' => 'telco_hier_building',
        'APPROVER_ORDER' => '0',
        'IS_READONLY' => '0',
        'FORM_ID' => '3913',
        'REFERENCE' => 'building',
    },
    {
        'DEFAULT_FIELD_LABEL' => 'Request Type',
        'APPROVER_ORDER' => '0',
        'IS_READONLY' => '0',
        'FORM_ID' => '3913',
        'REFERENCE' => 'request_type',

    },
    {
        'DEFAULT_FIELD_LABEL' => 'Request Completion Date',
        'APPROVER_ORDER' => '0',
        'IS_READONLY' => '0',
        'FORM_ID' => '3913',
        'REFERENCE' => 'request_completion_date',
    },
];

for (@{ $fields_dump }) {
    if ($_->{DEFAULT_FIELD_LABEL} =~ m/(telco_hier_|telco_imac_)building/) {
        my $telco_prefix = $1;
        print "$telco_prefix\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

telco_hier_
Run Code Online (Sandbox Code Playgroud)

perldoc perlvar中的进一步解释.