Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Recursive calls incorrectly enforce block prototype on scalar coderef

Aperta
#1,763 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
49/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
perl
Ambito
backend, testing

Direzione di ricerca

Start by reading the recursive call in the reproducer and tracing how PerlOnJava checks prototypes for named subroutine calls; the issue identifies failures on both the JVM and interpreter backends. Add the requested regression coverage, then run the focused reproducer on both backends and the HOP-Stream 0.03 upstream suite. Done means all three pass, including HOP::Stream loading successfully.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

area:parser bug

Summary

PerlOnJava rejects a valid recursive call to a subroutine declared with a block prototype. HOP-Stream 0.03 uses transform (&$) and recursively calls transform($f, tail($s)) from inside transform. Standard Perl accepts and runs this code, but PerlOnJava applies the block prototype check to the recursive call and rejects the scalar code reference $f.

Minimal reproducer

sub transform (&$) {
    my ($f, $x) = @_;
    return $x if $x <= 1;
    return transform($f, $x - 1);
}

print transform { $_[0] + 1 } 2;

Expected output: 2.

PerlOnJava reports:

Type of arg 1 to main::transform must be block or sub {} (not scalar variable)

Evidence

  • Distribution: HOP-Stream 0.03
  • CPAN random tester run: 20261011-174632-64969
  • Failing tests: t/00-load.t, t/10-streams.t, and t/pod-coverage.t; all fail because loading HOP::Stream fails at its recursive transform($f, tail($s)) call.
  • System Perl 5.42.2: PASS, all 64 runnable tests; POD coverage was skipped because Test::Pod::Coverage 1.04 was unavailable.
  • PerlOnJava v5.44.1: FAIL on both JVM and interpreter backends. The focused module-load reproduction also fails on both backends.
  • The distribution is pure Perl and has no native-code prerequisite.

This concerns prototype checking on a recursive named call. It is distinct from #1491, which tracked parsing an anonymous block followed by another argument.

Acceptance criteria

  • The focused reproducer passes on system Perl and both PerlOnJava backends.
  • Add permanent regression coverage for passing a scalar coderef to a block-prototype subroutine through a recursive call from within that subroutine.
  • HOP-Stream 0.03 loads successfully and its upstream suite passes under PerlOnJava.
Lingua principale
Perl
Stelle
64
Fork
7
Merge medio
5h 7m
PR unite (30g)
201

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di fglock/PerlOnJava

Tutte le issue di fglock/PerlOnJava

Issue simili

Altre issue su Perl

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.