Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Whole-glob aliases follow localized replacements instead of retaining the original GV

Đang mở
#1,630 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
35/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
perl
Lĩnh vực
compilers

Hướng nghiên cứu

Start with RuntimeGlob.set, RuntimeGlob.dynamicSaveState, and GlobalVariable.setGlobAlias to trace how whole-glob aliases and localized global IO bindings are represented. Add the project-owned regression for alias identity, nested localization, and scope restoration, then run the focused upstream test and the Smart-Comments-Log4perl 1.002 suite on both JVM and interpreter backends.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

area:io area:runtime bug

Summary

Whole-glob aliases incorrectly follow a dynamically localized replacement glob instead of retaining the original glob identity. This breaks code that saves a glob alias and later localizes the original name, including Smart::Comments::Log4perl's saved STDERR handle.

Minimal reproducer

package Capture;
use Tie::Handle;
sub TIEHANDLE { bless {}, shift }
sub TELL { 123 }
sub PRINT { }
package main;
*ORIGINAL = *STDERR;
close *STDERR;
my $buffer = q{};
open *STDERR, '>', \$buffer;
tie *CAPTURE, 'Capture';
{
    local *STDERR = *CAPTURE;
    print STDOUT "saved tell=", tell ORIGINAL, "\n";
}

System Perl prints saved tell=0. PerlOnJava prints saved tell=123 on both JVM and interpreter backends: ORIGINAL has incorrectly started resolving to the newly localized tied glob and dispatches to Capture::TELL.

CPAN evidence

  • Distribution: Smart-Comments-Log4perl 1.002
  • CPAN random tester run: 20261002-182937-4648
  • Upstream system Perl 5.42.2: all 10 test files pass (7 tests).
  • PerlOnJava 5.44.1, Java 24.0.2, macOS arm64: six test programs exit 255 before assertions. The JVM failure includes a StackOverflowError repeatedly entering Smart::Comments::Log4perl::IO::TELL, which delegates tell through its saved L4P_ORIGINAL_STDERR glob. The interpreter also fails the focused upstream test. The isolated glob/tie reproducer exhibits the wrong alias target on both backends.
  • The distribution and its dependencies are pure Perl; no XS or native prerequisite is involved.

Root cause

RuntimeGlob.set(RuntimeGlob) represents whole-glob assignment by recording a name alias through GlobalVariable.setGlobAlias. During local *STDERR, RuntimeGlob.dynamicSaveState installs a fresh RuntimeGlob in the global IO table for main::STDERR. Alias lookup remains name-based, so ORIGINAL resolves through main::STDERR to that new localized glob. Perl keeps the saved alias attached to the outer glob while the localized name refers to a temporary glob.

The alias relationship must preserve the original glob identity across dynamic localization and restore the named binding when the scope exits.

Acceptance criteria

  • Add a project-owned regression covering a whole-glob alias, localized replacement of its source name, and IO-slot access through the saved alias.
  • Match system Perl on both JVM and interpreter backends, including nested localization and scope restoration.
  • Verify the Smart-Comments-Log4perl 1.002 upstream suite passes on both backends.

Related issue

Related tied-filehandle work: #1338. That report covers a different tied-output dispatch failure; this report isolates the typeglob alias/localization defect.

Ngôn ngữ chính
Perl
Star
64
Fork
7
Merge trung bình
4 giờ 56 phút
Pull request đã merge (30 ngày)
181

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của fglock/PerlOnJava

Tất cả issue của fglock/PerlOnJava

Issue tương tự

Thêm issue về Perl

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.