in reply to Regex question - identify which pattern comes first

if ( /(BA[ABC]{2})|(CA[CD]{2})|(DA[SC]{2})/ ) { my $first = ( defined( $1 ) ? 1 : defined( $2 ) ? 2 : 3 ); ... }
local our $first; / (?: BA[ABC]{2} (?{ $first = 1; }) | CA[CD]{2} (?{ $first = 2; }) | DA[SC]{2} (?{ $first = 3; }) /x;

Update: I had mixed up (??{ }) and (?{ }). Fixed.

Replies are listed 'Best First'.
Re^2: Regex question - identify which pattern comes first
by harangzsolt33 (Deacon) on May 02, 2026 at 02:15 UTC
    Oh wow, that is an amazingly simple solution! Thank you so much!!! :-)
      > that is an amazingly simple solution!

      Did you try it?

      These (??{ $first = 1; }) won't work because they'll include 1,2 or 3 into the regex.

      Try (?{ $first = 1; }); with a single ? instead.

      Cheers Rolf
      (addicted to the Perl Programming Language :)
      see Wikisyntax for the Monastery

      Thus
        No, the second solution did not work. But the first one does work, and I never thought of doing it that way even though I knew you could capture using the parentheses. I didn't know you can use defined to figure out which one of the patterns was captured. The second solution, I think, requires a more modern Perl interpreter. I use Perl 5.8 mostly. It said unmatched regex --> / something... But it's okay. I'll use the first solution. I think, it's also easier to read.