in reply to Re^4: why such an error happened?
in thread why such an error happened?

Uhh, what?

I think you are confusing what $1 and $2 are. $1 represents what was matched in the first set of matched parenthesis. $2 represents what was matched in the second set of matched parenthesis. Seeing as there will never be two matched sets of parenthesis in your regex, $2 will never be defined.

I'm so adjective, I verb nouns!

chomp; # nom nom nom

Replies are listed 'Best First'.
Re^6: why such an error happened?
by ikegami (Patriarch) on Oct 20, 2008 at 09:45 UTC

    lightoverhead is correct. Perhaps you missed the "g" modifier? There will be three matches.

    1. $1 = substr($chr, 0, 4); $2 = undef;
    2. $1 = undef;              $2 = substr($chr, 5, 3);
    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