my $IDENT = qr/ [A-Za-z][\w]* /xs; my $STRING = qr/ \x27 ( (?:[^\x27] | \x27{2})* ) \x27 /xs; my $OP = qr/ (?: ==? | != | <=? | >=? ) /xs; my $INT = qr/ -?\d+ /xs; my $kind; my $REGEX = qr/ $IDENT (?{$kind = 'IDENT';}) | $OP (?{$kind = 'OP';}) | $INT (?{$kind = 'INT';}) | $STRING (?{$kind = 'STRING';}) | \S (?{$kind = 'OTHER';}) /xs;