Re: RFC 308 (v1) Ban Perl hooks into regexes
[email protected] (Hugo) Mon, 25 Sep 2000 23:26:26 +0100
| Newsgroups | perl.perl6.language.regex |
|---|---|
| Message-ID | <[email protected]> |
In <[email protected]>, Perl6 RFC Librarian writes: :It would be preferable to keep the regular expression engine as :self-contained as possible, if nothing else to enable it to be used :either outside Perl or inside standalone translated Perl programs :without a Perl runtime. : :To do this, we'll have to remove the bits of the engine that call :Perl code. In short: C<?{ code }> and C<??{ code }> must die. I would have thought it more reasonable, if you wish to create standalone translated Perl programs without a Perl runtime, to fail with a helpful error if you encounter a construct that won't permit it. You'll need to remove chunks of eval() and do() as well, otherwise, and probably more besides. In the context of a more shareable regexp engine, I would like to see (? and (?? stay, but they need to be implemented more cleanly. You could handle them quite nicely, I think, with just three well-defined external hooks: one to find the matching brace at the end of the code, one to parse the code, and one to run the code. Anyone wishing to re-use the regexp library could then choose either to keep the default drop-in replacements for those hooks (that die) or provide their own equivalents to the perl usage. I consider recursive regexps very useful: $a = qr{ (?> [^()]+ ) | \( (??{ $a }) \) }; .. and I class re-eval in general in the arena of 'making hard things possible'. But whether or not they stay, it would probably also be useful to have a more direct way of expressing simple recursive regexps such as the above without resorting to a costly eval. When I've tried to come up with an appropriate restriction, however, I find it very difficult to pick a dividing line. Hugo