Apocalypse 5
by Larry Wall
|
Pages: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24
Editor's Note: this Apocalypse is out of date and remains here for historic reasons. See Synopsis 05 for the latest information.
RFC 110: counting matches
I think we can avoid using any options if we make a pattern count matches when used in a numeric context. If in doubt, make it explicit:
$count = +/foo/;
If it turns out we do need an option, it'll probably be :n.
RFC 112: Assignment within a regex
This RFC is basically covered by the $foo:=(...) notation, plus
variations. The RFC claims that such assignments are not done till
the end, except that they are done ahead of closures. I'd rather
state it the other way around: it always appears that the current
hypothetical binding is assigned if you check, but as long as the
optimizer can determine that you aren't looking, it doesn't have to
keep up appearances. Contrariwise, if $foo is just a fancy way
of saying $1, there may in fact be no more overhead in maintaining
$foo than $1. Either is really just pointing into a table of offsets
into the string. That's assuming we get the scoping right on
hypothetical variables.
Some excerpts from the RFC:
-
The camel and the docs include this example:
if (/Time: (..):(..):(..)/) { $hours = $1; $minutes = $2; $seconds = $3; }This then becomes:
/Time: (?$hours=..):(?$minutes=..):(?$seconds=..)/
Now that looks like this:
/Time\: $hours:=(..) \: $minutes:=(..) \: $seconds:=(..)/
- It may be appropriate for any assignments made before a code callout to be localized so they can unrolled should the expression finally fail.
Rather than localized (or temporized), they are hypothesized.
-
The first versions of this RFC did not allow for backrefs. I now think this
was a shortcoming. It can be done with
(??{quotemeta $foo}), but I find this clumsy, a better way of using a named back ref might be(?\$foo).
Backrefs are now unified with hypothetical variables, so the issue doesn't arise.
Just use $foo.
-
Using this method for capturing wanted content, it might be desirable to stop
ordinary brackets capturing, and needing to use
(?:...). I therefore suggest that as an enhancement to regexes that /b (bracket?) ordinary brackets just group, without capture - in effect they all behave as(?:...).
There's no need for a /b now that we have [...] for non-capturing brackets.
Pages: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 |

