in reply to Re^2: Regex question - identify which pattern comes first
in thread Regex question - identify which pattern comes first

> 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

Replies are listed 'Best First'.
Re^4: Regex question - identify which pattern comes first
by harangzsolt33 (Deacon) on May 02, 2026 at 14:20 UTC
    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.
        Hmm... Yes, it does work! I just had to put another closing parentheses in the regex.

        use strict; use warnings; $| = 1; my $SAMPLE = 'AB ABDA DCACCB AAA BSAA CAAB ACS ABA DBA BA DASSABACA A' +; local our $first; $SAMPLE =~ m/ (?: BA[ABC]{2} (?{ $first = 1; }) | CA[CD]{2} (?{ $first = 2; }) | DA[SC]{2} (?{ $first = 3; }) ) /x; print $first;

        And I did a test. This second version runs almost twice as fast as the first one. Very interesting... :-)

        Edit: Sorry, I don't want to change the subject but can't help it. lol I did another test on isNumber() which looks like this:

        sub isNumber { defined $_[0] or return 0; my $N = 1; local $SIG{__WARN__} = sub { $N = 0; }; return ($_[0] & 0) | $N; }

        and it turns out that a simple regex test on a string to see if it's a number runs orders of magnitude faster than using the above method of trying to catch a warning...