Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Recursive calls incorrectly enforce block prototype on scalar coderef

Ouverte
#1,763 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
49/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Active
Stack technique
perl
Domaine
backend, testing

Piste de recherche

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.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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.
Langage dominant
Perl
Étoiles
64
Forks
7
Merge moyen
5 h 7 min
PR mergées (30 j)
201

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de fglock/PerlOnJava

Toutes les issues de fglock/PerlOnJava

Issues similaires

Plus d'issues Perl

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.