Summary
Set::IntSpan 1.19 fails one upstream test under PerlOnJava because valid Perl indirect-object method syntax is resolved as a call to a nonexistent main:: subroutine.
Reproduction
Run the normal Set::IntSpan 1.19 test suite. The focused failure is t/real_set.t, which contains calls such as:
my $set_2 = union $set "1-5,8-9";
my $set_3 = union $set $set_2;
my $set_4 = union $set +[1, 5, 2, 8, 9, 1, 3, 4, 9];
These are valid Perl indirect-object method calls. The union method is implemented by Set::IntSpan and is used through the object in $set.
Expected result
System Perl passes the complete upstream suite:
- 20 test files
- 1,947 tests
t/real_set.t passes all 4 tests
Actual result
PerlOnJava runs the first real_set.t operation successfully, then fails at the next indirect method call:
1..4
#real_set
#real_set: union set -> -
ok 1
Undefined subroutine &main::union called at t/real_set.t line 22.
The archived CPAN run records:
Failed 1/20 test programs. 0/1944 subtests failed.
The focused t/real_set.t failure reproduces on both the JVM and interpreter backends.
Likely root cause
The parser/compiler recognizes the first form, union $set, sufficiently to execute the empty-set case, but does not consistently preserve the indirect-object method dispatch when additional arguments follow. It emits or resolves union as an ordinary bareword subroutine call in the main package instead of dispatching it as a method on $set.
This is a pure-Perl parser/runtime compatibility issue. Set::IntSpan contains no XS, C, XSLoader, DynaLoader, or FFI dependency, and the failure is independent of services or platform prerequisites.
Acceptance criteria
- All indirect-object method forms used by
Set::IntSpan t/real_set.t dispatch to the object method on both backends.
Set::IntSpan 1.19 passes all 1,947 upstream tests on JVM and interpreter backends.
- Add project-owned regression coverage for an indirect method call with no extra argument, a string argument, an object argument, and an array-reference argument.
- Preserve existing parsing behavior for ordinary bareword subroutine calls and malformed syntax.
Evidence
- CPAN run:
20260918-141920-96054
- Distribution:
Set-IntSpan-1.19
- Failing test:
t/real_set.t, line 22 (union $set "1-5,8-9")
- System Perl: PASS, 20 files / 1,947 tests
- PerlOnJava: FAIL, 1 file; the run reached 1,944 tests before aborting
- JVM and interpreter: focused failure reproduced
Related issues
- #1166 tracks valid fully-qualified indirect-object constructor forms. It covers a related parser area, but not this unqualified indirect-object method dispatch form.
- #1314 tracks bareword filehandle method dispatch used by
Expect. It is related at the method-dispatch level, but this failure involves a normal Perl object and does not depend on filehandle or IO behavior.
This issue should be coordinated with those parser/runtime fixes, while retaining Set::IntSpan as independent regression coverage.
Summary
Set::IntSpan1.19 fails one upstream test under PerlOnJava because valid Perl indirect-object method syntax is resolved as a call to a nonexistentmain::subroutine.Reproduction
Run the normal
Set::IntSpan1.19 test suite. The focused failure ist/real_set.t, which contains calls such as:These are valid Perl indirect-object method calls. The
unionmethod is implemented bySet::IntSpanand is used through the object in$set.Expected result
System Perl passes the complete upstream suite:
t/real_set.tpasses all 4 testsActual result
PerlOnJava runs the first
real_set.toperation successfully, then fails at the next indirect method call:The archived CPAN run records:
The focused
t/real_set.tfailure reproduces on both the JVM and interpreter backends.Likely root cause
The parser/compiler recognizes the first form,
union $set, sufficiently to execute the empty-set case, but does not consistently preserve the indirect-object method dispatch when additional arguments follow. It emits or resolvesunionas an ordinary bareword subroutine call in themainpackage instead of dispatching it as a method on$set.This is a pure-Perl parser/runtime compatibility issue.
Set::IntSpancontains no XS, C,XSLoader,DynaLoader, or FFI dependency, and the failure is independent of services or platform prerequisites.Acceptance criteria
Set::IntSpant/real_set.tdispatch to the object method on both backends.Set::IntSpan1.19 passes all 1,947 upstream tests on JVM and interpreter backends.Evidence
20260918-141920-96054Set-IntSpan-1.19t/real_set.t, line 22 (union $set "1-5,8-9")Related issues
Expect. It is related at the method-dispatch level, but this failure involves a normal Perl object and does not depend on filehandle or IO behavior.This issue should be coordinated with those parser/runtime fixes, while retaining
Set::IntSpanas independent regression coverage.