Perl 5.42.0 변경 사항

Perl 5.42.0 변경 사항 (perl5420delta)

이 문서는 Perl 5.40.0 릴리스와 5.42.0 릴리스 사이의 차이를 설명해요.

출처: perldoc - perl5420delta

핵심 개선 사항 (Core Enhancements)

더 많은 CORE:: 서브루틴

chdirCORE:: 네임스페이스에 서브루틴으로 추가됐어요.

이전에는 &CORE::chdir($dir) 같은 코드나 my $ref = \&CORE::chdir; $ref->($dir) 같은 코드에서 &CORE::chdir cannot be called directly 오류가 났었는데, 이제 완전히 지원돼요.

새 프라그마 source::encoding

이 프라그마는 프로그램의 이 프라그마의 어휘 스코프 나머지 부분이 ASCII (use source::encoding 'ascii') 또는 UTF-8까지 허용(use source::encoding 'utf8')으로 인코딩되도록 선언해요. 다른 인코딩은 받지 않아요. 두 번째 형태는 use utf8와 완전히 동일하며 서로 바꿔 쓸 수 있어요.

이 프라그마의 목적은 use utf8를 잊고 지정하지 않은 경우를 일찍 잡아내기 위한 것이에요.

use source::encoding 'ascii'use v5.41.0 이상의 어휘 스코프 안에서 자동으로 활성화돼요.

no source::encoding은 스코프 나머지에서 모든 검사를 끄며, 그때 비ASCII 문자의 의미는 정의되지 않아요.

field 변수의 새 :writer 애트리뷰트

use feature 'class'로 정의된 클래스는 :reader가 reader 접근자를 만들듯이 :writer 애트리뷰트로 스칼라 field의 writer 접근자를 자동으로 만들 수 있어요.

class Point {
    field $x :reader :writer :param;
    field $y :reader :writer :param;
}

my $p = Point->new( x => 20, y => 40 );
$p->set_x(60);

anyall 연산자

리스트 처리 연산자 anyall을 도입하는 두 개의 새 실험 기능이 추가됐어요.

use v5.42;
use feature 'keyword_all';
no warnings 'experimental::keyword_all';

my @numbers = ...;

if ( all { $_ % 2 == 0 } @numbers ) {
    say "All the numbers are even";
}

이 키워드는 테스트 블록을 참으로 만드는 요소가 리스트에 있는지(any) 아니면 모든 요소가 참인지(all)를 판별해서 단지 true/false만 반환한다는 점에서 grep과 비슷하게 동작해요. 덕분에 단락(short-circuit)이 가능해서, 어떤 요소가 최종 결과를 결정해버리면 나머지 요소를 검사하지 않아도 돼요.

List::Util 모듈의 같은 이름 함수에서 영감을 받았지만, 코어 연산자로 직접 구현되어 더 빠르고 코드 블록을 호출하는 데 서브루틴 호출 스택 프레임을 추가로 만들지 않아요.

이 키워드를 켜는 피처 플래그는 feature 모듈이 :all export 태그로 모든 피처를 참조하는 것과 혼동을 피하기 위해 keyword_anykeyword_all로 명명됐어요. 관련 실험 경고 플래그도 experimental::keyword_any, experimental::keyword_all로 명명됐어요.

아포스트로피를 전역 이름 구분자로 쓰는 것 비활성화 가능

이것은 Perl 5.38에서 deprecated 됐고 perl 5.41.3에서 제거 예정이었는데, 논의 끝에 기본값으로 다시 복원됐어요.

이것은 기본적으로 켜져 있지만 5.41 피처 번들부터는 꺼지는 apostrophe_as_package_separator 피처로 제어할 수 있어요.

우리 코드에서 비활성화하고 싶다면 명시적으로 해제하면 돼요:

no feature "apostrophe_as_package_separator";

참고로 이 피처를 끄면 코드 안에서 패키지 구분자로 아포스트로피를 쓰는 것만 막아요. 심볼릭 참조는 여전히 '::로 취급해요:

my $symref = "My'Module'Var";
# 기본 피처
my $x = $My'Module'Var; # 정상
no feature "apostrophe_as_package_separator";
no strict "refs";
my $y = $$symref;       # $My::Module::Var처럼
my $z = $My'Module'Var; # 문법 오류

my method를 이용한 어휘 메서드 선언

Perl 5.18 이후의 sub처럼, 이제 method에도 my 키워드를 붙일 수 있어요. 이렇게 하면 패키지 가시성이 아니라 어휘(lexical) 가시성을 갖는 서브루틴이 선언돼요. 자세한 내용은 perlclass를 참고해요.

어휘 메서드 호출 연산자 ->&

어휘 메서드를 선언할 수 있게 된 것과 함께, 이 릴리스에서는 메서드처럼 어휘 서브루틴을 호출해 일반적인 이름 기반 메서드 해석을 우회하는 것도 허용해요.

어휘 메서드 선언과 결합하면 이 두 가지 새 능력은 비공개(private) 메서드를 갖는 효과를 만들어요.

switch와 Smart Match 연산자는 피처 뒤에 유지

"switch" 피처와 스마트매치 연산자 ~~는 v5.10에서 도입됐어요. 그 동작은 v5.10.1에서 크게 바뀌었어요. "experiment" 시스템이 v5.18.0에서 추가될 때 switch와 smartmatch가 소급해서 실험적(experimental)으로 선언됐어요. 몇 년 동안 이 피처를 고치거나 보완하자는 제안들이 오갔어요.

그들은 Perl v5.38.0에서 deprecated 되고 Perl v5.42.0에서 제거 예정이었어요. 광범위한 논의 끝에 제거가 무기한 연기됐어요. 이제 사용해도 deprecation 경고가 나지 않아요.

switch 자체는 여전히 switch 피처를 필요로 하는데, 이 피처는 v5.9.5부터 v5.34까지의 피처 번들에서 기본으로 켜져 있어요. switch는 5.35 이후 피처 번들에서는 꺼진 상태를 유지하지만 별도로 켤 수 있어요:

# 여기에는 switch 없음
use v5.10;
# 여기에는 switch 있음
use v5.36;
# 여기에는 switch 없음
use feature "switch";
# 여기에는 switch 있음

Smart match는 이제 기본으로 켜져 있고 5.40까지의 모든 피처 번들에 포함된 smartmatch 피처를 필요로 해요. 5.41 피처 번들부터는 꺼지지만 별도로 켤 수 있어요:

# 여기에 smartmatch 있음
use v5.41;
# 여기에 smartmatch 없음
use feature "smartmatch";
# 여기에 smartmatch 있음

Unicode 16.0 지원

Perl은 이제 15.1에서 도입된 변경을 포함해 Unicode 16.0을 지원해요.

논리적 xor 할당 ^^= 연산자

Perl 5.40.0은 논리적 중간 우선순위 배타적 or 연산자 ^^를 도입했어요. 그 당시에는 할당형 ^^=도 빠져 있었다는 걸 눈치채지 못했어요. 이제 추가됐어요.

보안 (Security)

[CVE-2024-56406] tr//의 힙 버퍼 오버플로 취약점

Perl에서 힙 버퍼 오버플로 취약점이 발견됐어요.

tr 연산자의 좌변에 비ASCII 바이트가 있을 때 S_do_trans_invmap()이 대상 포인터 d를 오버플로할 수 있어요.

$ perl -e '$_ = "\x{FF}" x 1000000; tr/\xFF/\x{100}/;'
Segmentation fault (core dumped)

이 취약점은 충분한 방어가 없는 플랫폼에서 서비스 거부(DoS) 또는 임의 코드 실행(ACE) 공격을 가능하게 할 수 있다고 여겨져요.

이 문제는 Nathan Mills가 발견했고 CPAN 보안 그룹에 의해 CVE-2024-56406으로 지정됐어요. 이 문제를 고치는 패치는 지원이 끝난 perl을 포함해 취약한 모든 perl에 적용 가능해요.

[CVE-2025-40909] Perl 스레드의 작업 디렉터리 경쟁 조건

Perl 스레드 클로닝에는 파일 연산이 의도하지 않은 경로를 대상으로 삼을 수 있는 작업 디렉터리 경쟁 조건(race condition)이 있었어요. Perl 5.42는 더 이상 각 핸들에 대해 chdir하지 않아요.

이 문제는 Vincent Lefèvre가 GH #23010을 통해 발견했고 CPAN 보안 그룹이 CVE-2025-40909로 지정했어요. 수정은 GH #23019와 GH #23361을 통해 제공됐어요.

비호환 변경 사항 (Incompatible Changes)

eval이 없는 함수의 포함 함수 참조 제거

Perl 5.40은 디버거가 사용하는 패키지 DB에서 eval EXPR의 특별한 동작을 깨뜨린 Perl 5.18에서 도입된 버그를 고치기 위해 함수에서 포함 함수로의 무조건 참조를 다시 도입했어요.

어떤 경우에는 이 변경이 클로저와 다른 기존 참조 사이의 순환 참조 체인으로 이어져 메모리 누수를 일으켰어요.

이 변경은 되돌려져 GH #22547이 고쳐졌지만 GH #19370이 다시 깨졌어요.

즉 참조 루프는 더 이상 발생하지 않게 되었고, 감싸는 함수의 어휘 변수와 함수가 디버거에서 보이지 않을 수 있어요.

함수에서 eval EXPR을 호출하면 언제나 그랬듯이 포함 함수를 참조하게 된다는 점을 참고해요.

성능 개선 사항 (Performance Enhancements)

  • 상수 폴딩된 문자열이 이제 Copy-on-Write 메커니즘으로 공유될 수 있어요. 이전에는 아래 코드가 각각 백만 개의 "A"를 담은 문자열 버퍼 11개를 할당했지만, 이제 단일 버퍼가 CONST OP와 @scalars의 열 개 스칼라 요소 사이에 공유돼요.
my @scalars; push @scalars, ("A" x 1_000_000) for 0..9;
  • tr///가 이제 피연산자의 내부 표현과 무관하게 (번역되는 문자가 모두 ASCII 범위라면) 같은 속도로 실행돼요. 이전에는 내부 인코딩이 UTF-8이면 더 느린 일반 구현이 사용됐어요.

  • builtin 모듈의 indexed 함수를 써서 인덱스/값 쌍 리스트를 만들어 두 변수 foreach 리스트로 다시 풀어내는 코드가 더 효율적으로 최적화됐어요. 특히 원본 크기의 두 배인 임시 리스트가 더 이상 생성되지 않아요.

my @array = (...);

foreach my ($idx, $val) (builtin::indexed @array) {
    ...
}
  • peephole 최적화기가 zero-offset substr 패턴을 인식해 새로운 전용 연산자 OP_SUBSTR_LEFT로 교체해요.
substr($x, 0, ...)
substr($x, 0, ..., '')
  • SVt_IV에서 온 정수의 print/say에 의한 문자열화가 더 효율적이 됐어요.

  • 단일 인자에서의 문자열 뒤집기(string reversal)가, 문자열 버퍼가 "swiped"되지 않을 때, 단일 패스로 이루어져 눈에 띄게 빨라졌어요. 개선 폭은 컴파일러와 하드웨어에 따라 달라요.

모듈과 프라그마 (Modules and Pragmata)

다음 모듈과 프라그마가 업그레이드됐어요:

Archive::Tar 3.04, B::Deparse 1.85, Benchmark 1.27, builtin 0.019, Compress::Raw::Bzip2 2.213, Compress::Raw::Zlib 2.213, Config::Perl::V 0.38, CPAN 2.38, CPAN::Meta::YAML 0.020, Data::Dumper 2.192, DB 1.09, DBM_Filter 0.07, Devel::Peek 1.36, Devel::PPPort 3.73, Digest::MD5 2.59, DynaLoader 1.57, experimental 0.035, Exporter 5.79, ExtUtils::CBuilder 0.280242, ExtUtils::MakeMaker 7.76, ExtUtils::ParseXS 3.57, ExtUtils::Typemaps 3.57, Fcntl 1.20, feature 1.97, fields 2.27, File::Spec 3.94, Getopt::Long 2.58, HTTP::Tiny 0.090, IO::Compress 2.213, IO::Socket::IP 0.43, IPC::Open3 1.24, locale 1.13, Math::BigInt 2.005002, Math::BigInt::FastCalc 0.5020, Math::Complex 1.63, Memoize 1.17, Module::CoreList 5.20250702, NDBM_File 1.18, ODBM_File 1.20, Opcode 1.69, overload 1.40, parent 0.244, perlfaq 5.20250619, Pod::Usage 2.05, podlators v6.0.2, POSIX 2.23, re 0.48, Safe 2.47, Scalar::Util 1.68_01, Search::Dict 1.08, SelfLoader 1.28, sort 2.06, Storable 3.37, strict 1.14, Term::Table 0.024, Test::Harness 3.50, Test::Simple 1.302210, Thread 3.06, threads 2.43, threads::shared 1.70, Tie::File 1.10, Tie::RefHash 1.41, Time::HiRes 1.9778, Time::Piece 1.36, Unicode::UCD 0.81, utf8 1.27, version 0.9933, VMS::Filespec 1.15, warnings 1.74, Win32 0.59_01, XS::APItest 1.43.

문서 (Documentation)

perlapi

  • 여러 관련 함수 그룹의 문서를 단일 항목으로 통합.
  • 모든 형태의 gv_fetchmeth()가 함께 문서화.
  • gv_autoload4gv_autoload_pv와 함께 문서화되고 추가 참고가 붙음.

perldata

  • 이진·팔진 부동소수점 상수(예: 012.345p-2, 0b101.11p-1)가 이제 문서화됐어요. 이 피처는 perl 5.22.0에서 16진 부동소수점 상수와 함께 처음 도입됐고 perl 5.28.0에서 몇몇 버그 수정이 있었지만 공식적으로 문서화된 적은 없었어요.

perlfunc

  • refreftype의 설명이 내장 타입·클래스 이름과의 관계로 명확해짐.
  • perl sort가 안정적(stable)임을 명확히 함 (v5.8.0부터).
  • rand()의 권장 대안이 CPAN 보안 그룹이 권장하는 현대 모듈로 업데이트됨.

perlgov

  • 2024-07-17 선거 결과에 맞춰 스티어링 위원회와 코어 팀 목록이 업데이트됨.

perlguts

  • "실제" AV와 "가짜" AV의 설명 추가.
  • Newx/Renew/Safefreemalloc/realloc/free를 섞는 것이 허용되지 않는다는 문서 업데이트.
  • TARG 설명에 추가 주의사항.

perlop

  • 같은 우선순위의 연산자들이 한 섹션에 오도록 순서 복원.
  • here-doc 문서 정리·재구성.
  • xor 연산자 문서 확장.
  • UTF-8 로케일에서 관계 문자열 연산자에 대한 낡은 조언 제거 — 최상의 결과를 위해 Unicode::Collate 사용 권장.
  • 축자(verbatim) 섹션 정렬 정규화.

perlvar

  • $#$* 항목이 경고가 아니라 컴파일 오류를 낳는다는 점을 명시.

진단 (Diagnostics)

새 오류

  • Use of non-ASCII character 0x%X illegal when 'use source::encoding "ascii"' is in effect — (F) 이 프라그마는 스코프 안에서 비ASCII 문자를 금지해요.
  • Undefined subroutine &%s called, close to label '%s' — (F) 가리키는 서브루틴이 정의되지 않았거나 이후 undef 되었어요. 패키지 구분자를 잘못 타이핑해 콜론 하나만 쓴 경우(예: Foo:bar()가 레이블 Foo 뒤에 정규화되지 않은 함수 이름 foo: bar()로 해석됨)에도 이 오류가 날 수 있어요.

새 경고

  • __CLASS__ is experimental — (S experimental::class) use feature 'class'__CLASS__ 키워드를 쓰면 발생. 현재 실험적이며 동작이 바뀔 수 있음.
  • %s() attempted on handle %s opened with open() — (W io) open()으로 연 핸들에 readdir(), telldir(), seekdir(), rewinddir(), closedir()을 호출했음을 알려줘요. 디렉터리 탐색을 원하면 opendir()로 열어야 해요.
  • Possible precedence problem between ! and %s — (W precedence) !$x < $y 같은 코드는 (!$x) < $y로 해석되는데, !가 비교 연산자·=~·isa보다 우선순위가 높기 때문이에요. 부정 비교 연산자($x >= $y), 괄호(!($x < $y)), 또는 저우선순위 not 연산자를 쓰면 명확히 할 수 있어요.

바뀐 진단

  • %s() attempted on invalid dirhandle %s — readdir/telldir/seekdir/rewinddir/closedir의 별도 메시지가 통합됨.
  • Useless use of %s in void context — 이제 0 < $x < 1 같은 연결 비교에도 경고.
  • Use of uninitialized value%s — 키가 정의되지 않은 untied 해시 요소에 대한 lvalue 참조인 @_의 함수 매개변수 접근 시 경고 방지.

유틸리티 변경 (Utility Changes)

Porting/test-dist-modules.pl

  • 설치된 모듈을 덮어쓰지 않는 별도 설치는 이제 기본값.
  • 문서가 크게 확장됨.

구성과 컴파일 (Configuration and Compilation)

  • C 로케일만 있는 플랫폼(예: "Gentoo Prefix")에서 컴파일 수정.
  • 대부분 문서화되지 않은 구성 매크로 PERL_STRICT_CR가 제거됨. 켜면 파서가 소스의 CR 문자를 만나면 치명적 오류를 냈는데, 이제 기본(그리고 유일한) 동작은 CR을 새줄과 짝을 이루는 경우 제거하고 그 외에는 공백으로 취급하는 것.
  • 덜 알려진 PERL_CR_FILTER 매크로도 제거됨.

테스트 (Testing)

  • 알려진 미해결 버그용 TODO 테스트를 위한 새 t/run/todo.t 추가.
  • perl을 빌드하는 C 컴파일러에 해당하는 C++ 컴파일러에 대해 perl 헤더 테스트 추가.

플랫폼 지원 (Platform Support)

  • arm64 Darwin: use64bitall과 Configure 사용 시 arm64 darwin hints 수정.
  • Android: perl_langinfo.h 변경.
  • Cygwin: cygwin.c의 C 오류 수정, cygperl*.dll의 명시적 베이스 주소 제공.
  • MacOS (Darwin): MacOS 15(Darwin 24) 이상에서 로케일 문자열 정렬(collation)이 libc의 실패한 assert 때문에 꺼짐. -Accflags=-DNO_LOCALE_COLLATE로 명시적으로 끌 수 있음.

내부 변경 사항 (Internal Changes)

  • sv_strftime_ints() API 도입 — 호환성을 위해 유지되는 my_strftime의 향상된 버전. UTF-8 처리를 해주고 일광 절약 시간 고려 여부를 지정할 수 있어요. my_strftime은 DST를 고려하지 않아요.
  • valid_identifier_pve(), valid_identifier_pvn(), valid_identifier_sv() API 추가 — 문자열이 Perl의 유효한 식별자 이름인지 검사.
  • SVt_IVSVt_NV 할당 시 두 타입 모두 "bodyless"면 타입 변경만으로 처리해 body 구조체 할당·해제를 피함.
  • 네이티브 바이트 → UTF-8 변환을 위한 새 API bytes_to_utf8_free_me, bytes_to_utf8_temp_pv 추가 — 변환이 불필요하면 원본 그대로 반환. bytes_to_utf8은 항상 새 메모리를 할당했음.
  • 서브루틴 시그니처 파싱이 op.c의 새 함수들로 옮겨짐 — 파서 스택 대신 PL_parser 구조체의 전용 메모리 구조체에 상태를 유지.
  • 정규식 전역 매치 위치를 다루는 새 API sv_regex_global_pos_get/set/clear 추가 — XS 모듈이 PERL_MAGIC_regex_global magic을 몰라도 되게 함.
  • SvVSTRING 매크로 — "vstring" SV의 두 번째 문자열 버퍼를 얻는 데 SvPV처럼 사용.
STRLEN len;
const char *vstr_pv = SvVSTRING(sv, vstr_len);
  • ExtUtils::ParseXS 내부 리팩터링 — 생성 C 코드가 조금 더 효율적일 수 있고, 이전에는 조용히 잘못된 C 코드를 만들던 XS 오류에서 이제 경고를 더 잘 냄. 파싱할 수 없는 매개변수를 조용히 무시하던 버그가 컴파일 오류로 바뀜.

선택된 버그 수정 (Selected Bug Fixes)

  • S_SvREFCNT_dec의 널 포인터 역참조 수정.
  • feature 'class'의 DESTROY 세그멘테이션 오류 수정.
  • chdir이 이제 문서대로 실제 boolean을 반환 (실패 시 '0'이 아닌 ''로 문자열화).
  • 복합 할당 연산자가 더 수정할 수 있는 lvalue를 반환:
($x &= $y) += $z;
# 다음과 동등:
#  $x &= $y;
#  $x += $z;
  • POSIX::strftime이 문자열이 아닌 인자에서 크래시/이상한 오류를 내던 버그 수정 — 이제 첫 인자를 문자열화.
  • pack("p", ...)/pack("P", ...)가 이제 읽기 전용이 아니면 SvPV_force()하여 CoW 제거 — 생성된 포인터를 통한 쓰기가 같은 CoW 버퍼를 공유하는 다른 SV 값을 수정하지 못하게 함.
  • goto로 꼬리 호출하거나 call_sv() API로 builtin::trim(), refaddr(), reftype(), ceil(), floor(), stringify()를 호출하면 TARG 버그로 크래시/assert — 수정.
  • sv_gets()I32 대신 SSize_t append offset을 받도록 수정 — qx///readline의 대형 SV append 시 정수 오버플로 방지.
  • utf8n_to_uvchr가 연속 바이트나 할당되지 않은 바이트로 시작하는 잘못된 UTF-8 시퀀스를 제대로 잡지 못하던 문제 수정 (Encode.pm 등 관련 문제 해결).
  • 파서가 =cut로 시작하는 일부 POD 지시문을 잘못 =cut로 파싱하던 문제 수정 (=cut2studio, =cut_grass, =cute 등).
  • 32-bit x86에 -msse와 quadmath 빌드 시 정렬 오류 크래시 수정.
  • POSIX 계열 스레드 빌드에서 시그널 핸들러가 시그널을 받으면 메인 perl 스레드로 재전송 (이전에는 크래시).
  • state로 어휘 배열·해시 선언 후 즉시 반환 시 "Bizarre copy of HASH/ARRAY in subroutine exit" 오류 수정.
  • builtin::trim()TARG를 제대로 비우지 않아 두 번째 평가에서 오래된 캐시 수치를 쓰던 문제 수정.
  • shmread/shmwrite가 더 이상 31-bit 값으로 제한되지 않고 플랫폼의 POSSIBLE 모든 비트 사용.
  • $SIG{__DIE__}/$SIG{__WARN__} 핸들러가 재귀적으로 호출될 수 없게 됨 — 원래 핸들러 호출이 반환될 때까지 추가 예외·경고는 %SIG를 무시하고 직접 처리.
  • UTF-8 로케일에서 U+110000 같은 위-Unicode 코드 포인트 비교 시 동작이 U+10FFFF처럼 정렬되도록 정의.
  • 정규식 \g{...} 역참조 내용 검증 — \g{1 FOO}가 조용히 \g{1}로 해석되던 문제 수정.
  • 매치를 실행한 코드로 재귀하는 코드 블록을 포함한 런타임 패턴의 크래시 수정.
  • 디버깅 모드 소스 라인 저장 형식 최적화 — 64-bit에서 줄당 24바이트 절약.
  • fork 에뮬레이션의 저장 스택 클로닝이 RExC 상태 해제를 중복하지 않도록 보장.
  • last 같은 루프 탈출을 쓰는 코드 참조에 대한 Smartmatch 크래시 수정.
  • 클래스 이니셜라이저와 ADJUST 블록의 last/루프 탈출 크래시 수정 (같은 원인).
  • defer {}/finally {} 블록 내부에서 완전히 잡힌 예외가 더 이상 바깥 run-loop를 멈추지 않음:
defer {
    try { die "It breaks\n"; }
    catch ($e) { warn $e }

    say "This line would never run";
}
  • readlineEAGAIN/EWOULDBLOCK 오류 시 오류 플래그를 지우도록 수정.
  • open(my $fh, "+>", undef)의 익명 임시 파일 생성 동작 관련 — 5.41.3의 추가 검사가 autodie 같은 open 래퍼 API를 망가뜨려, 이 릴리스에서는 이전 동작으로 되돌림.

부고 (Obituaries)

Abe Timmerman (ABELTJE)

2024년 8월 15일 별세. 2002년부터 가능한 한 많은 구성에서 Perl 코어 테스트를 실행하고 결과를 읽기 쉬운 보고서로 합치는 프로젝트인 Test::Smoke를 만들고 유지했어요. Perl Toolchain Summit, 네덜란드 Perl Workshop, Amsterdam.pm 모임의 단골 참석자였어요.

Andrew Main (ZEFRAM)

2025년 3월 10일 별세. 언어와 문화 양면에서 Perl에 거대한 영향을 준 뛰어난 인물이었어요. 사이버 공간에서의 추모 장소는 http://www.fysh.org/~zefram/personal/예요.

감사의 말 (Acknowledgements)

Perl 5.42.0은 Perl 5.40.0 이후 약 13개월의 개발을 대표하며, 65명의 저자가 1,600개 파일에 걸쳐 약 280,000줄의 변경을 담고 있어요. 자동 생성 파일, 문서, 릴리스 도구를 제외하면 860개의 .pm/.t/.c/.h 파일에 약 94,000줄이 변경됐어요.

버그 신고 (Reporting Bugs)

버그를 찾으면 https://github.com/Perl/perl5/issues의 perl 버그 데이터베이스에서 확인해 보세요. 신고되지 않은 버그라고 생각되면 작지만 충분한 테스트 케이스로 줄여서 이슈를 열어주세요. 보안 영향이 있는 버그는 perlsec의 SECURITY VULNERABILITY CONTACT INFORMATION을 참고해요.

감사 인사 전하기 (Give Thanks)

Perl 5에 대해 Perl 5 Porters에게 감사를 표하고 싶다면 perlthanks 프로그램을 실행하면 돼요:

perlthanks

SEE ALSO: 변경 사항의 상세를 보려면 Changes 파일, 빌드 방법은 INSTALL, 일반 사항은 README, 저작권 정보는 Artistic/Copying 파일을 봐요.