Honor scalar context for sort returned from a subroutine

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

Mantenedores costumam responder em até 1 dia

@fglock já está trabalhando nisso.

Desde 6/11/2026.

  • #1992 de @fglock — aberto

Avaliação

Dificuldade
3/5
Tempo estimado
1-2 dias
Facilidade para iniciantes
25/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Estagnada
Stack de tecnologia
perl
Domínio
backend

Direção de pesquisa

Start by reviewing PR #1992, which is already open and describes the fix across the JVM and interpreter backends. Trace how a subroutine return passes runtime context to sort, then run the focused regression and scalar-sort tests on both backends. Done means scalar callers receive Perl's undef result while list behavior remains covered.

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

Descrição

area:runtime bug

Summary

sort in a subroutine return did not honor the caller's scalar context. Perl returns undef for sort in scalar context, but PerlOnJava returned the number of sorted values. This broke DataCube 0.01's tables method, which returns sort keys ... and is called in scalar context by its test suite.

Minimal reproducer

sub f { return sort qw(a b c) }
my $x = f();
print defined($x) ? "<$x>\n" : "undef\n";

Expected under system Perl: undef

Before the fix, PerlOnJava returned <3> on both JVM and interpreter backends.

Evidence

  • CPAN distribution: DataCube 0.01; random tester run 20261106-154847-45334.
  • System Perl 5.42.2: upstream make test passed, 26 tests.
  • PerlOnJava 5.44.1, build commit 13db7bd4a0: t/00_use.t exited 255 on both JVM and interpreter after 15 assertions, with Can't use string ("40") as a HASH ref.
  • The DataCube test assigns $cube->tables to a scalar. DataCube::tables returns sort keys ...; the scalar result was then treated as a hash reference.

Confirmed cause and fix

Static scalar-context sort was already handled. In a subroutine return, however, the caller's context is dynamic: PerlOnJava retained the sorted list and generic return handling scalarized it to the list length. PR #1992 passes the runtime context to sort on both backends, preserving input evaluation while skipping the comparator and returning undef for a scalar caller.

The focused regression and existing scalar-sort tests pass on system Perl, JVM, and interpreter. The full repository make and documentation link check pass. The DataCube suite progresses beyond the former failure, but later tests exceed the bounded 180-second runs; a full post-fix DataCube suite pass is not claimed.

Linguagem predominante
Perl
Estrelas
65
Forks
8
Merge médio
5h 57min
PRs com merge (30d)
177

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.