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_.
我究竟做错了什么?
匹配范围限定为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中的进一步解释.