我知道Perl 5中所谓的实验(?{ ... })
工具来执行代码作为此类print
语句,设置全局变量。
但是,我需要:
引用(?{ ... })
块内的匹配字符串;以及
取决于其值,执行一些任意代码
所需用法:
$input =~ m/ (foo)
(?{ if (defined (\1) { process(\1) } })
bar
/x;
注意:显然可能有很多替代方案可以实现相同的效果(TMTOWDI),但我现在只对上述风格感兴趣。因此,帖子。
答案 0 :(得分:3)
这是一个例子。
perldoc perlre:
$^N
包含与最近关闭的群组(子匹配)匹配的内容
<强> test_extended_re_code.pl 强>
#!/usr/bin/env perl
use warnings;
use strict;
my @input = split /\n/, <<"END";
foo 123 bar
foo 456 bar
fo 789 bar
foo xyz bar
END
for my $input ( @input ) {
$input =~ m/foo (\d+)(?{ process( $^N ) if $^N }) bar/;
}
sub process {
my ($txt) = @_;
print "Processing '$txt'\n";
}
<强>输出强>
Processing '123'
Processing '456'