Skip to content

feat: add (?(R)...) recursion conditional support#34

Draft
toddr-bot wants to merge 1 commit intocpan-authors:mainfrom
toddr-bot:koan.toddr.bot/recursion-conditionals
Draft

feat: add (?(R)...) recursion conditional support#34
toddr-bot wants to merge 1 commit intocpan-authors:mainfrom
toddr-bot:koan.toddr.bot/recursion-conditionals

Conversation

@toddr-bot
Copy link
Copy Markdown
Collaborator

@toddr-bot toddr-bot commented Apr 3, 2026

What

Add support for (?(R)...), (?(R1)...), and (?(R&name)...) recursion conditionals.

Why

These are valid Perl 5.10+ constructs that were previously rejected with "Unknown switch condition" errors. They test whether the current position is inside a recursive call — essential for writing recursive patterns like balanced parentheses or nested structures.

How

Three new node types in Objects.pm, all with family => 'groupp' (consistent with existing condition nodes):

  • groupr — bare recursion check
  • grouprn — numbered group recursion check (with nparen() accessor)
  • grouprname — named group recursion check (with name() accessor)

Handler detection added in ifthen( before the single-char dispatch, matching R), R\d+), and R&name) patterns.

Testing

All 1264 tests pass (109 new). New t/19recurse_cond.t covers walker tree structure, round-trips, and node accessors. Existing round-trip test updated with recursion conditional patterns.

🤖 Generated with Claude Code


Quality Report

Changes: 5 files changed, 328 insertions(+), 1 deletion(-)

Code scan: clean

Tests: passed (OK)

Branch hygiene: clean

Generated by Kōan post-mission quality pipeline

Add three new node types for recursion conditions in (?(...)...) syntax:
- groupr: bare (?(R)...) — tests if inside any recursion
- grouprn: (?(R1)...) — tests if recursing into group N
- grouprname: (?(R&name)...) — tests if recursing into named group

These are valid Perl 5.10+ constructs that were previously rejected
with "Unknown switch condition" errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant