lightoverhead is correct. Perhaps you missed the "g" modifier? There will be three matches.
- $1 = substr($chr, 0, 4); $2 = undef;
- $1 = undef; $2 = substr($chr, 5, 3);
- $1 = substr($chr, 9, 4); $2 = undef;
Update: I understand your confusion better now. I'll correct what you said:
$1 represents what was matched in the first set of matched parenthesis. $2 represents what was matched in the second set of matched parenthesis.
There's no such thing as "matched parentheses" Either the whole pattern matches or it doesn't.
________ $1 unconditionally refers to this capture
/ if the match was successful.
|
| __ $2 unconditionally refers to this capture
| / if the match was successful.
| |
v v
/(...)|(...)/
It can easily be demonstrated:
for (qw(a b)) {
/(a)|(b)/;
print(
defined($1) ? $1 : '~',
defined($2) ? $2 : '~',
"\n"
);
}
a~
~b
|