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; #### sub isNumber { defined $_[0] or return 0; my $N = 1; local $SIG{__WARN__} = sub { $N = 0; }; return ($_[0] & 0) | $N; }