sub parse { my $input= shift; my $code= ... # assemble regex sub text like above my $lexer= eval $code or die "BUG: syntax error in generated code: $@"; local $_= $input; &$lexer || die "Syntax error at '" . substr($_, pos, 10) . "'" while pos < length; }