develooper Front page | perl.perl5.porters | Postings from January 2022

Re: Re extension

Thread Next
January 9, 2022 20:12
Re: Re extension
Message ID:
OK so I was able to partially implement this (not counting the fact that it
needs the previous patch to compile initially  (and then you apply this one
and do again)) GOSUB extensions · 6a4h8/perl5@cdca990 (
this is WIP - issues explained below)

Why is the stack from 0 to maxopenparen saved on a sub call - shouldn't we
save the parens that the sub will occupy instead (I start to see that this
is considering the most basic scenario where we recurse the whole pattern
but in a more complex one we can run entirely different code and thus
saving up to 0 - maxopenparen wouldn't make sense then).

Common comment I see is:

perl5/regexec.c:4249 at blead · Perl/perl5 (

perl5/regexec.c:389 at blead · Perl/perl5 (

Which leads me to believe lastparen and maxopenparen aren't doing it for
other complex scenarios as well.

Anyway I'm working on this in pair with my extensions which are basically:

(?&&sub) - leaves the matches inside intact
(?&&&sub) - same as (?&sub) - restore matches at exit, but on entry hides
the matches of outer scope

Also (?&+sub) which will save the sub match group regardless of invocation
type down the recursion stack.

My question here is (if anyone can help) - how to get the closing paren + 1
of a GOSUB in regexec and if not any suggestions of how to store it (from

Like I see that reg2Lanode can only store 2 arguments - can I sneak a third
one somehow?

Post note:
I learned today that my previous email wasn't send to perl5-porters email
as well but only to my original replier. It looks like I don't have reply
all button on gmail.

Alexander Nikolov

On Sat, Dec 18, 2021 at 5:43 AM sasho648 <> wrote:

> I'm mostly looking for the logistics of how this could be implemented.
> I didn't consider arguments - my idea was that something like this:
> (?(DEFINE)(?<sub>(?<te>TE)(?<st>ST)))(?&&sub)
> Will not pop the matches made inside sub so we will have named matches
> `te` and `st` at the end of this regular expression.
> On Fri, Dec 17, 2021 at 9:21 PM Ed Peschko <> wrote:
>> that sounds really powerful now that I'm looking at it. I'm assuming
>> that it would be triggered each time the (?&&sub) is hit going
>> forward, like a positive zero width assertion and that the matched
>> groups at that time would be passed as arguments to the sub.
>> Ed
>> On Fri, Dec 17, 2021 at 7:03 PM sasho648 <> wrote:
>> >
>> > Hello,
>> >
>> > Could it be possible to have like
>> >
>> > (?&&sub)
>> >
>> > Which will keep the matched groups inside the sub.
>> >
>> > I know I've asked this before but back then I wasn't subscribed and
>> have no idea what you guys answered me plus right now I've done some
>> modifications to the re engine myself and have more insight except trying
>> to achieve this.
>> >
>> > Thanks in advance,
>> > Alexander Nikolov

Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About