Two problems: First, note that each qr// has its own set of modifiers, so the /mix modifiers don't affect those regexes, and the ^ anchors to the beginning of the string, not each line. Second, the || operator places the =~ m// operation into scalar context, so it won't return the list of capture groups, just a true/false value for success/failure. The following works for me:
my $pre_regex = qr/^\s*define\s*\(\s*['"]/mix; my $post_regex = qr/['"]\s*,\s*['"]([^'"]+)['"]/mix; ($db, $db_user, $db_pass) = map { $string =~ /$pre_regex $_ $post_regex/mix ? $1 : 'unknown' } qw(DB_NAME DB_USER DB_PASSWORD);
However, having said that, I don't quite understand this approach. What is this you're trying to parse, some kind of config file? Parsing parenthesized and quoted stuff can easily become nontrivial (escaping, nesting, etc.), and this regex approach seems a little too simplistic.
In reply to Re: Assigning mapped regex to a list
by haukex
in thread Assigning mapped regex to a list
by nysus
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |