Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Recursive calls incorrectly enforce block prototype on scalar coderef

Fechada
#1,763 1 comentário 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
49/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Ativa
Stack de tecnologia
perl
Domínio
backend, testing

Direção de pesquisa

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.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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.
Linguagem predominante
Perl
Estrelas
64
Forks
7
Merge médio
4h 57min
PRs com merge (30d)
203

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de fglock/PerlOnJava

Todas as issues de fglock/PerlOnJava

Issues semelhantes

Mais issues de Perl

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.