in reply to Assigning mapped regex to a list
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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Assigning mapped regex to a list
by huck (Prior) on Feb 27, 2017 at 21:02 UTC | |
by haukex (Archbishop) on Feb 27, 2017 at 21:15 UTC | |
by Anonymous Monk on Feb 27, 2017 at 21:26 UTC | |
by huck (Prior) on Feb 27, 2017 at 21:24 UTC | |
|
Re^2: Assigning mapped regex to a list
by nysus (Parson) on Feb 27, 2017 at 21:08 UTC | |
by Anonymous Monk on Feb 27, 2017 at 21:08 UTC | |
|
Re^2: Assigning mapped regex to a list
by Anonymous Monk on Feb 27, 2017 at 20:57 UTC |