print $re;
__DATA__
(?-xism:(?-xism:(?:(foo))(?{$result{$_}++}))|(?-xism:(?:(bar))(?{$result{$_}++})
)|(?-xism:(?:(12345))(?{$result{$_}++}))|(?-xism:(?:(abcd))(?{$result{$_}++})))
####
my $data = "foofdsfdsbar";
my @matches =
$data =~ m/(foo)(?{print "($1,$2,$+)"})|(bar)(?{print "($1,$2,$+)"})/g;
__DATA__
(foo,,foo)(,bar,bar)
##
##
#!/usr/bin/perl
use strict;
use re 'eval';
my @keywords = qw/foo bar 12345 abcd/;
my ($string) = "foobarfoo1234523423412345abcdefsadfabc";
our %result;
my @regexen = map {
qr/(?:(\Q$_\E))(?{$result{$+}++})/
} @keywords;
my $re = do {
local $" = '|';
qr/@regexen/;
};
my @match = $string =~ /$re/g;
print "$_: $result{$_}\n" for @keywords;