Pod::PerlPoint v0.06 leaves ${__pod2pp__empty__} unexpanded on both backends

Open
#1,404 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
55/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
perl
Domain
compilers

Research direction

Start with the failing Pod-PerlPoint test file t/all.t and reproduce both assertions on the JVM and interpreter backends. Then reduce the behavior to a PerlOnJava regression test for braced scalar interpolation involving ${pod2pp__empty}, comparing both backend implementations. Done means both backends match system Perl for t/all.t while preserving literal ${...} text where required.

Written by the indexing model from the issue text.

Description

area:backend area:runtime bug

Summary

Pod-PerlPoint v0.06 fails its upstream t/all.t regression test on both PerlOnJava execution backends.

This was observed in CPAN random tester run 20260916-111623-23683 for the Pod::PerlPoint target record. The failure is reproducible and appears to be a PerlOnJava interpolation/escaping incompatibility.

Reproduction

Run the unmodified CPAN distribution test file:

t/all.t

Results:

  • System Perl 5.42.2: passes, 1/1 test program and 2/2 assertions.
  • PerlOnJava JVM backend: fails, 2/2 assertions.
  • PerlOnJava interpreter backend: fails, 2/2 assertions.

The PerlOnJava result is stable across both backends and is not a timeout, missing service, display requirement, or native/XS dependency issue.

Mismatch

The test compares generated PerlPoint text. In the first expected document, PerlOnJava retains literal ${__pod2pp__empty__} markers where the expected output contains the marker's empty expansion. In the second expected document, PerlOnJava likewise retains ${__pod2pp__empty__} in list/paragraph positions where system Perl produces ..

The failing assertions are the two checks in t/all.t that compare the generated output against the traditional and parser-4.0 expected PerlPoint documents.

The module implementation intentionally emits ${__pod2pp__empty__} as a PerlPoint variable reference and generates a definition of $__pod2pp__empty__. Under standard Perl, the generated text is interpreted as intended. Under PerlOnJava, the variable-reference syntax is not being expanded equivalently, leaving the literal marker in the output.

Expected behavior

Both PerlOnJava backends should produce the same two strings as system Perl for the upstream test, including the empty-variable handling and the . paragraph markers.

Regression context

The CPAN tester record is marked REGRESS against baseline commit e35e5f15d (baseline date 2026-09-07).

Suggested investigation

  1. Reduce the behavior to a small PerlOnJava regression test covering interpolation of a generated string containing ${__pod2pp__empty__} and the subsequent assignment/use of $__pod2pp__empty__.
  2. Compare JVM and interpreter handling of braced scalar interpolation, especially when the variable is embedded in text generated by a module.
  3. Verify that the fix preserves literal ${...} text where Perl semantics require it to remain literal.
  4. Re-run Pod-PerlPoint v0.06 t/all.t on both backends and confirm both assertions pass.

References

  • CPAN random tester run: 20260916-111623-23683
  • Distribution: Pod-PerlPoint v0.06
  • Failing test: t/all.t
Dominant language
Perl
Stars
64
Forks
6
Avg merge
5h 25m
Merged PRs (30d)
157

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from fglock/PerlOnJava

All issues in fglock/PerlOnJava

Similar issues

More Perl issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.