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... |