[IO::Handle] Qualify builtin close calls to avoid load-time warnings

Offen Anfängerfreundlich
#2,024 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
1/5
Geschätzter Aufwand
Unter einer Stunde
Anfängerfreundlichkeit
88/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
perl
Bereich
backend

Rechercherichtung

Untersuche src/main/perl/lib/IO/Handle.pm bei den gemeldeten Aufrufen um Zeile 301 und 501. Qualifiziere beide Aufrufe des Built-ins als CORE::close($fh) und erhalte dabei das Bereinigungsverhalten von DESTROY. Lade anschließend IO::Handle mit aktivierten Warnungen sowohl im JVM- als auch im Interpreter-Backend. Fertig ist es, wenn das Laden des Moduls keine mehrdeutigen Warnungen ausgibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

area:io area:warnings bug

Summary

Loading the bundled IO::Handle module emits two ambiguous warnings even though both calls are intended to invoke Perl's builtin close:

use warnings;
require IO::Handle;

PerlOnJava reports warnings at src/main/perl/lib/IO/Handle.pm lines 301 and 501. The module defines IO::Handle::close earlier (line 86), so these later bare close($fh) calls are ambiguous. The comment at line 298 already describes the intended operation as CORE::close, but the call is not qualified. The DESTROY call also needs explicit builtin qualification while preserving deterministic handle cleanup.

Expected and actual behavior

Expected: requiring IO::Handle produces no warnings.

Actual on PerlOnJava, with both JVM and interpreter backends:

Ambiguous call resolved as CORE::close(), qualify as such or use & at jar:PERL5LIB/IO/Handle.pm line 301.
Ambiguous call resolved as CORE::close(), qualify as such or use & at jar:PERL5LIB/IO/Handle.pm line 501.

System Perl 5.42.2 loads its core IO::Handle without warnings. Its DESTROY is defined before close, and it has no later bare calls to that builtin.

This caused Data-Message-Board 0.06, CPAN random run 20261109-091152-39587, to fail t/Test-Shared-Fixture-Data-Message-Board-Example/01-use.t (no warnings): 1 of 75 tests failed on PerlOnJava. The complete suite passed 75/75 under the archived system-Perl oracle.

Environment and source

  • PerlOnJava source: 4aca25e9fc5ebe26fb0081173a0cc9e3339c9c60
  • OpenJDK 24.0.2, macOS arm64
  • System Perl: 5.42.2

Qualify the two builtin calls as CORE::close($fh) and retain the existing DESTROY cleanup behavior.

Vorherrschende Sprache
Perl
Sterne
67
Forks
8
Ø Merge
6 Std. 14 Min.
Gemergte PRs (30 T.)
143

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus fglock/PerlOnJava

Alle Issues in fglock/PerlOnJava

Ähnliche Issues

Weitere Issues zu Perl

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.