Skip to content

fix: throw proper exception for nonexistent Scalar plugin methods#394

Draft
toddr-bot wants to merge 1 commit intoabw:masterfrom
toddr-bot:koan.toddr.bot/fix-scalar-monad-method-check
Draft

fix: throw proper exception for nonexistent Scalar plugin methods#394
toddr-bot wants to merge 1 commit intoabw:masterfrom
toddr-bot:koan.toddr.bot/fix-scalar-monad-method-check

Conversation

@toddr-bot
Copy link
Copy Markdown
Contributor

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

What

Fix the Scalar plugin monad to throw a typed exception when a nonexistent method is called.

Why

Calling object.scalar.nonexistent_method produced a cryptic Perl internal error:

undef error - Can't use an undefined value as a subroutine reference at Scalar.pm line 108

This makes debugging difficult because the error type is undef (generic) and the message reveals Perl internals rather than the actual problem.

How

Added a check after $this->can($item): if the method doesn't exist, throw a Template::Exception of type scalar with a clear message (no such method: <name>). This matches the pattern used when calling scalar methods on non-objects (line 104).

Testing

Added a test case to t/scalar.t that calls a nonexistent method via the scalar monad and verifies the proper exception type and message.

🤖 Generated with Claude Code


Quality Report

Changes: 2 files changed, 9 insertions(+), 1 deletion(-)

Code scan: clean

Tests: passed (OK)

Branch hygiene: clean

Generated by Kōan post-mission quality pipeline

When calling a nonexistent method via the scalar monad
(e.g. object.scalar.no_such_method), the code called can() which
returned undef, then tried to use undef as a code reference. This
produced a cryptic Perl error:

  undef error - Can't use an undefined value as a subroutine reference

Now throws a proper Template::Exception:

  scalar error - no such method: no_such_method

Co-Authored-By: Claude Opus 4.6 <[email protected]>
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