이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 명령 perl5160delta입니다.
프로그램:
이름
perl5160delta - perl v5.16.0의 새로운 기능
기술
이 문서에서는 5.14.0 릴리스와 5.16.0 릴리스 간의 차이점에 대해 설명합니다.
5.12.0과 같은 이전 릴리스에서 업그레이드하는 경우 먼저 perl5140delta를 읽으십시오.
5.12.0과 5.14.0의 차이점을 설명합니다.
이 릴리스의 일부 버그 수정 사항은 5.14.x의 이후 릴리스로 백포트되었습니다. 저것들
괄호 안에 5.14.x 버전이 표시되어 있습니다.
주의
Perl 5.16.0이 출시되면서 5.12.x 릴리스 시리즈는 이제 지원이 중단되었습니다.
기간. 향후 5.12.x 릴리스가 있을 수 있지만 보안이 중요한 경우에만 해당됩니다.
문제. Perl 5.12 이하 사용자는 최신 릴리스로 업그레이드하는 것을 고려해야 합니다.
펄의.
이 정책은 perlpolicy에 더 자세히 설명되어 있습니다.
핵심 개선
"사용하다 버전"
이번 릴리스부터 "v5.16 사용"과 같은 버전 선언은 이제 이전에 모든 기능을 비활성화합니다.
새로운 기능 번들을 활성화합니다. 이는 다음 사항이 적용됨을 의미합니다.
5.016 사용
# 여기서는 5.16 기능만 활성화됩니다.
5.014 사용
# 여기서는 5.14 기능만 활성화됩니다(5.16은 아님)
"v5.12 사용" 이상에서는 계속해서 strict를 활성화하지만 명시적인 "use strict" 및 "no
strict"는 이제 버전 선언이 먼저 나오더라도 무시됩니다.
엄격하지 않음;
5.012 사용
# 여기서는 엄격하지 않습니다
활성화된 기능 세트를 나타내는 새로운 ":default" 기능 번들이 있습니다.
버전 선언이나 "기능 사용"이 표시되기 전입니다. 아래 버전 선언
5.10에서는 이제 ":default" 기능 세트가 활성화되었습니다. 이는 실제로 동작을 변경하지 않습니다.
"v5.8을 사용하세요". ":default" 세트에 추가된 기능은 전통적으로
끄기 전에는 기본적으로 활성화됩니다.
이제 "기능 없음"이 기본 기능 세트로 재설정됩니다. 모든 기능을 비활성화하려면(
꽤 특별한 목적의 요청일 가능성이 높습니다. 이름이 지정된 어떤 것과도 일치하지 않을 것이기 때문입니다.
의미 집합) 이제 "no feature ':all'"이라고 쓸 수 있습니다.
$[는 이제 "v5.16 사용"에서 비활성화됩니다. 이는 기본 기능 세트의 일부이며 다음과 같이 할 수 있습니다.
"'array_base' 기능 사용"을 통해 명시적으로 켜거나 끌 수 있습니다.
"__보결__"
"current_sub" 기능(기능 참조) 또는 "use"에서 사용할 수 있는 새로운 "__SUB__" 토큰
v5.16", 현재 서브루틴에 대한 참조를 반환하여 재귀적 작성을 더 쉽게 만듭니다.
폐쇄.
신제품 그리고 개선 내장
더 보기 일관된 "평가"
"eval" 연산자는 때때로 문자열 인수를 일련의 문자로 취급하고
때로는 내부 인코딩에 따라 바이트 시퀀스로 표시되기도 합니다. 내부
인코딩은 아무런 차이를 만들지 않지만 이에 의존하는 코드가 있습니다.
불일치.
새로운 "unicode_eval" 및 "evalbytes" 기능("5.16.0 사용"에서 활성화됨)으로 이 문제가 해결되었습니다.
"unicode_eval" 기능을 사용하면 "eval $string"이 문자열을 항상 유니코드로 처리합니다.
"evalbytes" 기능은 "evalbytes"라는 함수를 제공합니다.
해당 인수는 항상 바이트 문자열입니다.
이러한 기능은 소스 필터가 외부 동적 범위로 누출되는 이상한 문제도 수정합니다.
자세한 내용은 기능을 참조하세요.
"하위 문자열" l값 개조하다
"substr"이 lvalue 또는 두 개 또는 세 개의 인수가 있는 잠재적 lvalue 컨텍스트에서 호출되는 경우,
원래 문자열(첫 번째 인수)을 수정하는 특수 lvalue 스칼라가 반환됩니다.
할당되었을 때.
이전에는 "substr"에 전달된 오프셋(두 번째 및 세 번째 인수)은 다음과 같았습니다.
문자열과 일치하도록 즉시 변환되며 음수 오프셋은 양수로 변환됩니다.
잘리는 문자열의 끝을 넘어서는 오프셋.
이제 오프셋은 특수 lvalue 스칼라에 수정 없이 기록됩니다.
반환되고 원래 문자열은 "substr" 자체에서는 확인되지 않지만,
반환된 lvalue를 읽거나 수정합니다.
이러한 변경으로 인해 호환되지 않는 변경이 발생합니다.
"substr"을 호출한 후 할당하기 전에 원래 문자열의 길이가 변경된 경우
반환 값인 경우 음수 오프셋은 끝에서부터의 위치를 기억합니다.
문자열은 다음과 같이 코드에 영향을 미칩니다.
내 $string = "문자열";
내 $lvalue = \substr $string, -4, 2;
$$lvalue, "\n"을 인쇄합니다. # "ri"를 인쇄합니다
$string = "보관용 끈";
$$lvalue, "\n"을 인쇄합니다. # "wi"를 인쇄합니다; "il"을 인쇄하는 데 사용됩니다.
세 번째 인수를 생략해도 같은 일이 발생합니다. 반환된 lvalue는 항상
문자열이 길어지더라도 문자열 끝까지 연장됩니다.
이 변경으로 인해 많은 버그가 수정될 수도 있었습니다(""substr" 연산자" 참조).
음수 오프셋의 동작이 지정된 적이 없으므로 변경 사항이 간주됩니다.
허용.
반품 가치 of "묶인"
동률 변수에 대해 "tied"에 의해 반환된 값은 이제 다음을 보유하는 실제 스칼라입니다.
변수가 연결된 개체입니다. 이로 인해 관계가 약화될 수 있습니다.
"스칼라::Util::weaken(tied $tied_variable)".
유니 코드 고객 지원
지원 (거의) 유니 코드 6.1
완전히 새로운 스크립트를 추가하고 기존 스크립트에 새로운 캐릭터를 추가하는 것 외에도
언제나 그렇듯이 새 버전의 유니코드에서는 기존 문자가 일부 변경됩니다. 하나의 변화
일부 응용 프로그램에서 문제가 발생할 수 있는 것은 일반 범주에 두 문자가 있다는 것입니다.
Latin-1 범위인 PILCROW SIGN 및 SECTION SIGN이 Other_Symbol에서 다음으로 변경되었습니다.
기타_구두점. 각 티베트어의 문자에 대해서도 동일한 변경이 이루어졌습니다.
에티오피아와 에게해. 코드 포인트 U+3248..U+324F(검은색 사각형에 원이 있는 숫자 XNUMX
BLACK SQUARE의 CIRCLED NUMBER EIGHTY를 통해)의 일반 카테고리가 변경되었습니다.
Other_Symbol에서 Other_Numeric으로. 줄 바꿈 속성이 히브리어 및
일본어; 그리고 6.1의 다른 변경으로 인해 Perl 정규식 구성은 "\X"입니다.
이제 태국어와 라오스의 일부 문자에 대해 다르게 작동합니다.
많은 속성 값에 대해 새로운 별칭(동의어)이 정의되었습니다. 이것들과 함께
이전에 존재했던 것들은 모두 perluniprops에서 교차 색인화되었습니다.
"charnames::viacode()"의 반환 값은 다른 변경 사항의 영향을 받습니다.
코드 포인트 이전 이름 새 이름
U+000A 라인피드(LF) 라인피드
U+000C 용지 공급(FF) 용지 공급
U+000D 캐리지 리턴(CR) 캐리지 리턴
U+0085 다음 라인 (NEL) 다음 라인
U+008E 단일교대 2 단일교대-2
U+008F 단일교대 3 단일교대-3
U+0091 개인용 1 개인용-1
U+0092 개인용 2 개인용-2
U+2118 스크립트 자본 P WEIERSTRASS 타원 함수
Perl은 이러한 이름 중 하나를 입력으로 허용하지만 "charnames::viacode()"는 이제 다음을 반환합니다.
각 쌍의 새 이름. U+2118에 대한 변경은 유니코드에서 수정으로 간주됩니다.
원래 이름은 실수였습니다(그러나 다시 말하지만, 이 이름을 사용해도 영원히 유효합니다).
U+2118 참조). 그러나 이러한 변경 사항의 대부분은 Unicode 6.0의 실수로 인한 결과입니다.
일본 휴대폰에 사용되는 문자를 "BELL"로 명명하여 만든 것입니다.
해당 이름의 오랜 업계 사용(및 유니코드 사용 권장 사항)은 다음과 같습니다.
U+0007에 ASCII 제어 문자가 있습니다. 따라서 해당 이름은 Perl에서 더 이상 사용되지 않습니다.
v5.14부터 이를 사용하면 경고 메시지가 표시됩니다(해당 기능을 끄지 않는 한). 이름
"ALERT"는 이제 이 코드 포인트에 대해 선호되는 이름이며 "BEL"은 허용되는 짧은 이름입니다.
형태. 코드 포인트 U+1F514의 새 휴대폰 문자 이름은 정의되지 않은 상태로 유지됩니다.
이 버전의 Perl에서는(따라서 우리는 유니코드 6.1 전체를 구현하지는 않습니다)
v5.18에서 BELL은 U+0007이 아닌 이 문자를 의미합니다.
유니코드는 이런 종류의 실수가 다시는 발생하지 않도록 조치를 취했습니다. 그만큼
이제 표준에는 제어를 위해 일반적으로 허용되는 모든 이름과 약어가 포함됩니다.
이전에는 그렇지 않았지만(대부분의 경우 권장되는 이름이 있었지만)
Perl이 사용한 것). 이는 권장되는 이름 중 대부분이 이제
공식적으로 표준에 포함되었습니다. 유니코드는 네 개의 코드 포인트에 대한 이름을 권장하지 않았습니다.
위에 U+008E와 U+008F 사이에 나열되어 있으며 표준화 과정에서 유니코드가 미묘하게 변경되었습니다.
각 이름의 마지막 공백을 대체하여 Perl이 이전에 부여한 이름
하이픈으로. 유니코드는 또한 FILE과 같이 Perl이 더 이상 사용하지 않는 이름을 공식적으로 허용합니다.
분리 기호. 이제 더 이상 사용되지 않는 유일한 이름은 BELL입니다. 마지막으로 Perl은 이제 새로운 공식을 사용합니다.
의 처음 XNUMX개 코드 포인트에 대한 이전(현재는 사용되지 않는 것으로 간주됨) 이름 대신 이름을 사용합니다.
위의 목록(괄호가 있는 목록).
이제 이름이 유니코드 표준에 포함되었으므로 이러한 종류의 변경 사항은 다음과 같습니다.
다시는 이런 일이 발생하지 않지만 U+2118과 같은 수정은 여전히 가능합니다.
유니코드는 또한 Perl이 이제 허용하는 몇 가지 이름 약어를 추가했습니다. SP는 SPACE; 탭
문자표; LINE FEED의 경우 NEW LINE, END OF LINE, NL 및 EOL; 잠금-시프트 XNUMX
SHIFT OUT의 경우; SHIFT IN을 위한 LOCKING-SHIFT ZERO; ZERO WIDTH NO-Break Space의 경우 ZWNBSP.
이 유니코드 버전에 대한 자세한 내용은 다음에서 제공됩니다.
<http://www.unicode.org/versions/Unicode6.1.0/>.
"사용하다 이름" is 아니 이상 필요 을 통한 "\N{이름}"
"\N{이름}" 이 발생하면 이제 "charnames" 모듈이 자동으로 로드됩니다.
":full" 및 ":short" 옵션이 지정된 것처럼 필요합니다. 자세한 내용은 캐릭터 이름을 참조하세요.
정보.
"\N{...}" 지금 있다 유니 코드 느슨하게 name 어울리는
이는 아래 "업데이트된 모듈 및 Pragmata"의 "charnames" 항목에 설명되어 있습니다.
유니 코드 상징 이름
Perl은 이제 기호 이름에서 유니코드를 적절하게 지원합니다. 예전에는 "*{$foo}"였습니다.
내부 UTF8 플래그를 무시하고 기본 표현의 바이트를 사용하여
기호를 찾아보세요. 즉, "*{"\x{100}"}" 및 "*{"\xc4\x80"}"는
같은 것. Perl의 모든 부분은 유니코드를 고려하여 수정되었습니다.
· 메소드 이름("overload 사용"에 전달된 이름 포함)
· Typeglob 이름(변수, 서브루틴 및 파일 핸들 이름 포함)
· 패키지 이름
· "이동"
· 기호적 역참조
· "bless()"와 "tie()"에 대한 두 번째 인수
· "ref()"의 반환값
· 서브루틴 프로토타입
· 속성
· 변수 이름이나 값, 메소드를 언급하는 다양한 경고 및 오류 메시지
등
또한 "*{e}"가 암시적으로 인용되지 않도록 하는 구문 분석 버그가 수정되었습니다.
대신에 "*{+e}"로 해석되어 엄격한 위반이 발생합니다.
"*{"*a::b"}" 뒤에 ASCII 문자가 오면 *를 자동으로 제거합니다. 저것
모든 유니코드 식별자 문자로 확장되었습니다.
ASCII가 아닌 한 문자의 구두점 없는 변수(예: "$e")는 이제 "사용됨"에 적용됩니다.
한 번만" 경고. 예전에는 구두점으로 취급되어 면제되었습니다.
변수.
또한 단일 문자 유니코드 구두점 변수(예: $X)가 이제 지원됩니다. [perl
#69032].
개선 능력 에 혼합 지방의 그리고 유니코드, 웹사이트 통합을 원활하게 구현해드립니다. UTF-8 지방의
"로케일 사용"에 선택적 매개변수가 추가되었습니다.
로케일 ':not_characters'를 사용하십시오.
이는 Perl에게 현재의 "LC_CTYPE" 및 "LC_COLLATE" 부분을 제외한 모든 부분을 사용하도록 지시합니다.
장소. 대신 문자 집합은 유니코드로 간주됩니다. 이를 통해 로케일과
점점 더 자주 사용되는 UTF-8 로케일을 포함하여 유니코드를 원활하게 혼합할 수 있습니다. 언제
이 하이브리드 형태의 로케일을 사용하면 개방형 pragma에 대한 ":locale" 계층을 사용하여 다음을 수행할 수 있습니다.
파일 시스템과 인터페이스하며 ARGV 및
환경 변수 변환.
자세한 내용은 perllocale에 있습니다.
신제품 기능 "FC" 그리고 일치하는 탈출 순서 "\에프" 을 통한 유니 코드 접는 케이스
유니코드 폴드케이스는 두 가지를 비교할 때 더 나은 결과를 제공하는 소문자의 확장입니다.
문자열은 대소문자를 구분하지 않습니다. 오랫동안 내부적으로 정규식 "/i"로 사용되었습니다.
어울리는. 이제 새로운 "fc" 함수 호출을 통해 명시적으로 사용할 수 있습니다.
"'fc' 기능 사용" 또는 "v5.16 사용" 또는 "CORE::fc"를 통해 명시적으로 호출 가능) 또는
큰따옴표 문자열의 새로운 "\F" 시퀀스.
자세한 내용은 perlfunc의 "fc"에 있습니다.
The 유니 코드 "스크립트_확장" 재산 is 지금 지원.
유니코드 6.0의 새로운 기능으로 향상된 "스크립트" 속성입니다. 자세한 내용은 "스크립트"에 있습니다.
펄루니코드.
XS 변경
개선 타입맵 을 통한 일부 빌트인 유형
대부분의 XS 작성자는 T_AVREF의 OUTPUT 유형 맵에 오랜 버그가 있다는 것을 알고 있습니다.
("AV*"), T_HVREF ("HV*"), T_CVREF ("CV*") 및 T_SVREF ("SVREF" 또는 "\$foo")
typemap 대신 반환 값의 참조 횟수를 수동으로 감소시킵니다.
이것을 처리합니다. 이전 버전과의 호환성을 위해 기본값에서는 변경할 수 없습니다.
타입맵. 그러나 이제 우리는 "T_AVREF_REFCOUNT_FIXED" 등의 추가 유형 맵을 제공합니다.
이 버그를 나타내지 마십시오. 확장 프로그램에서 이를 사용하는 것은 한 줄만 사용하는 것만큼 간단합니다.
"TYPEMAP" 섹션:
HV* T_HVREF_REFCOUNT_FIXED
"is_utf8_char()"
XS 호출 가능 함수 "is_utf8_char()"는 잘못된 UTF-8 입력이 표시될 때 다음을 수행할 수 있습니다.
문자열 끝을 넘어 최대 12바이트까지 읽습니다. 이건 바꾸지 않고는 고칠 수 없어
API이므로 이제 더 이상 사용되지 않습니다. "is_utf8_char_buf()"를 사용하십시오(바로 설명됨).
아래) 대신.
추가 "is_utf8_char_buf()"
이 기능은 더 이상 사용되지 않는 "is_utf8_char()" 기능. 그것은
입력 버퍼의 끝을 지나 읽지 않도록 하기 위한 추가 매개변수가 포함되어 있습니다.
기타 "is_utf8_foo()" 기능, as 잘 as "utf8_to_foo()", 등
UTF-8로 인코딩된 입력을 사용하는 대부분의 다른 XS 호출 가능 함수는 암시적으로
UTF-8은 버퍼 길이와 관련하여 유효합니다(형식이 잘못되지 않음). 다음과 같은 행동을 하지 마십시오.
문자의 대소문자를 변경하거나 먼저 문자인지 확인하지 않고 영숫자인지 확인합니다.
유효한 UTF-8. 다음 함수 중 하나를 사용하여 전체 문자열에 대해 안전하게 수행할 수 있습니다.
"is_utf8_string()", "is_utf8_string_loc()" 및 "is_utf8_string_loclen()".
신제품 인주 API
어휘 패드를 조작하기 위해 API에 많은 새로운 기능이 추가되었습니다. "패드"를 참조하십시오.
자세한 내용은 Perlapi의 데이터 구조'를 참조하세요.
변경 에 이달의 스페셜 변수
$$ be 할당 된 에
$$는 Perl 5.8.0에서 읽기 전용으로 만들어졌습니다. 하지만 가끔은 "local $$"가 성공할 때도 있습니다.
다시 쓸 수 있습니다. 일부 CPAN 모듈은 읽기를 우회하기 위해 "local $$" 또는 XS 코드를 사용했습니다.
확인만 하므로 $$를 읽기 전용으로 유지할 이유가 없습니다. (이 변경으로 인해 버그도 허용되었습니다.
이전 버전과의 호환성을 유지하면서 수정될 예정입니다.)
$^X 변환 에 an 순수한 통로 on 프리BSD, OS X 그리고 솔라리스
$^X는 이제 OS X, FreeBSD에서 절대 경로로 변환됩니다(필요 없음). / proc 장착)
및 Solaris 10 및 11. 이는 다음을 사용하는 이전 접근 방식을 보완합니다. / proc 리눅스에서는,
FreeBSD 및 NetBSD(모든 경우, 마운트된 경우).
이는 재배치 가능한 Perl 설치를 이러한 플랫폼에서 더욱 유용하게 만듭니다. (보다
"재배치 가능 @INC" INSTALL)
디버거 변경
기능 내부 전에, 디버거
현재 Perl의 기능 번들은 이제 대화형 명령에 입력된 명령에 대해 활성화됩니다.
디버거.
신제품 option 을 통한 전에, 디버거 t 명령
The t 추적 모드를 전환하는 디버거의 명령은 이제 숫자 인수를 허용합니다.
추적할 서브루틴 호출 수준 수를 결정합니다.
"할 수 있게 하다" 그리고 "장애를 입히다"
이제 디버거에는 기존 중단점을 비활성화하기 위한 "비활성화" 및 "활성화" 명령이 있습니다.
다시 활성화합니다. 펄디버그를 참조하세요.
중단 점 과 파일 이름
중단점 설정을 위한 디버거의 "b" 명령을 사용하면 이제 줄 번호 앞에 다음이 붙을 수 있습니다.
파일 이름. Perldebug의 "b [파일]:[라인] [조건]"을 참조하세요.
The "핵심" 네임 스페이스
The "핵심::" 접두사
이제 "CORE::" 접두어를 feature.pm에 의해 활성화된 키워드에 사용할 수 있습니다.
"사용 기능"의 범위.
서브루틴 in 전에, "핵심" 네임 스페이스
이제 많은 Perl 키워드를 CORE 네임스페이스에서 서브루틴으로 사용할 수 있습니다. 이를 통해 그들은
별명이 붙다:
BEGIN { *얽힘 = \&CORE::tie }
$variable, $package, @args를 얽히게 합니다.
그리고 프로토타입을 우회하려면:
하위 mytie(\[%$*@]$@) {
내 ($ref, $pack, @args) = @_;
... 뭔가 해봐 ...
&CORE::tie로 이동;
}
이들 중 일부는 참조나 &foo 구문을 통해 호출할 수 없지만 호출해야 합니다.
베어워드로.
자세한 내용은 CORE를 참조하세요.
기타 변경
익명 핸들
자동으로 생성된 파일 핸들은 이제 변수 이름이 __ANONIO__로 지정됩니다.
$__ANONIO__이 아닌 결정할 수 없습니다.
자동 로드됨 종류 서브루틴
이제 사용자 정의 정렬 서브루틴을 자동으로 로드할 수 있습니다 [perl #30661]:
하위 자동 로드 { ... }
@sorted = foo 정렬 @list; # 자동로드를 사용합니다
"계속하다" 아니 이상 필요 전에, "스위치" 기능
"continue" 키워드에는 두 가지 의미가 있습니다. 이후에 "계속" 블록을 도입할 수 있습니다.
루프를 실행하거나 현재 "when" 블록을 종료할 수 있습니다. 지금까지는 후자의 의미가 유효했다.
"스위치" 기능이 활성화된 경우에만 해당되며, 그렇지 않으면 구문 오류가 발생합니다. 메인 이후로
feature.pm의 목적은 사용자 정의 서브루틴과의 충돌을 피하는 것입니다.
"계속" 의존하는 이유.
DTrace 프로브 을 통한 통역사 상 이전 단계로 돌아가기
"위상 변화" 프로브는 인터프리터의 위상이 변경될 때 실행됩니다.
"${^GLOBAL_PHASE}" 변수. "arg0"은 새 단계 이름입니다. "arg1"은 오래된 것입니다. 이것
계측을 컴파일 시간, 런타임 또는 중 하나 이상으로 제한하는 데 유용합니다.
시간을 파괴합니다.
"__FILE__()" 통사론
이제 "__FILE__", "__LINE__" 및 "__PACKAGE__" 토큰을 빈 쌍으로 쓸 수 있습니다.
그 뒤에 괄호가 있습니다. 이렇게 하면 "시간", "포크" 및 기타 구문과 동일한 방식으로 구문 분석됩니다.
내장된 기능.
The "\$" 프로토 타입 받아 들인다 어떤 스칼라 l값
"\$" 및 "\[$]" 서브루틴 프로토타입은 이제 모든 스칼라 lvalue 인수를 허용합니다.
이전에는 "$"로 시작하는 스칼라와 해시 및 배열 요소만 허용했습니다.
이 변경으로 인해 내장된 "read" 및 "recv" 기능과 일관성이 유지됩니다.
(다른 것 중에서) 그들의 주장을 분석합니다. 이는 내장된 기능을 재정의할 수 있음을 의미합니다.
인수를 동일한 방식으로 구문 분석하는 사용자 정의 서브루틴을 사용하는 함수입니다.
"_" in 서브 루틴 프로토 타입
이제 서브루틴 프로토타입의 "_" 문자가 "@" 또는 "%" 앞에 허용됩니다.
보안
"is_utf8_char_buf()" 그리고 지원 "is_utf8_char()"
후자의 함수는 API가 이를 보장하기에 충분하지 않기 때문에 이제 더 이상 사용되지 않습니다.
입력 문자열의 끝을 넘어서는 읽지 않습니다(최악의 경우 최대 12바이트). 보다
is_utf8_char_buf().
흉하게 생긴 UTF-8 입력 수 원인 시도 에 읽기 그 너머 전에, end of 전에, 버퍼
두 개의 새로운 XS 액세스 가능 함수인 "utf8_to_uvchr_buf()" 및 "utf8_to_uvuni_buf()"가 이제
이를 방지하기 위해 Perl 코어를 변환하여 사용할 수 있도록 하였습니다. 보다
"내부 변경".
"파일::Glob::bsd_glob()" 기억 오류 과 GLOB_ALTDIRFUNC (CVE-2011-2728).
지원되지 않는 플래그 GLOB_ALTDIRFUNC를 사용하여 "File::Glob::bsd_glob"을 호출하면
액세스 위반/세그폴트. 외부로부터 플래그 값을 받아들이는 Perl 프로그램
소스는 서비스 거부 또는 임의 코드 실행 공격에 노출될 수 있습니다.
실제로 알려진 익스플로잇은 없습니다. 문제는 명시적으로 수정되었습니다.
지원되지 않는 모든 플래그를 비활성화하고 사용되지 않는 함수 포인터를 null로 설정합니다. 벌레
Clement Lecigne이 보고했습니다. (5.14.2)
권한 are 지금 세트 바르게 언제 배정하다 에 $(
잘못된 설정으로 인해 발생하는 가상의 버그(실제로는 악용되지 않을 가능성이 높음)
$(를 설정하는 동안 유효한 그룹 ID가 수정되었습니다. 버그는 다음에만 영향을 미쳤습니다.
"setresgid()"는 있지만 "setregid()"는 없지만 그러한 시스템은 알려져 있지 않습니다.
있다.
지원 중단
마 읽기 전에, 유니 코드 데이터 기지 파일 in 라이브러리/유니코어
이제 유니코드 데이터베이스 파일을 직접 읽는 것은 더 이상 사용되지 않습니다. 이것들은 다음 위치에 저장됩니다.
전에, 라이브러리/유니코어 예배 규칙서. 대신 Unicode::UCD의 새 함수를 사용해야 합니다.
이는 안정적인 API를 제공하고 완전한 정보를 제공합니다.
Perl은 향후 어느 시점에 이러한 파일을 변경하거나 제거할 수 있습니다. 파일은
가장 많이 사용했던 애플리케이션은 다음과 같습니다. lib/unicore/ToDigit.pl. "prop_invmap()"에서
대신 Unicode::UCD를 사용하여 데이터를 가져올 수 있습니다.
XS 기능 "is_utf8_char()", "utf8_to_uvchr()" 그리고 "utf8_to_uvuni()"
이 함수는 입력 문자열의 끝 이상을 읽을 수 있으므로 더 이상 사용되지 않습니다. 사용
새로운 is_utf8_char_buf(), "utf8_to_uvchr_buf()" 및 "utf8_to_uvuni_buf()"를 대신 사용하세요.
미래 지원 중단
이 섹션에서는 다음과 같은 기능에 대해 설명합니다. 아마도 제거되거나 더 이상 사용되지 않습니다.
Perl의 다음 릴리스(5.18.0). 코드가 이러한 기능에 의존하는 경우 다음을 수행해야 합니다.
메일링 리스트를 통해 Perl 5 Porters에 문의하세요.
<http://lists.perl.org/list/perl5-porters.html> 또는 perlbug를 사용하여 사용 사례를 설명하고
지원 중단 프로세스를 알립니다.
핵심 모듈
이 모듈은 더 이상 사용되지 않는 것으로 표시될 수 있습니다. 에 전에, core. 이는 단지 그들이 그렇게 할 것임을 의미합니다.
더 이상 코어 배포판과 함께 기본적으로 설치되지 않지만 계속 사용할 수 있습니다.
CPAN.
· CPANPLUS
· 필터::단순
· PerlIO::mmap
· 포드::LaTeX
· 포드::파서
· 셀프로더
· 텍스트::Soundex
· Thread.pm
플랫폼 과 아니 지원 프로그래머
이러한 플랫폼은 5.17.0에서 특수 빌드 지원이 제거될 수 있습니다.
개발 시리즈.
· BeOS
· djgpp
· dgux
· EPOC
· MPE/iX
· 랩소디
· UTS
· VM/ESA
기타 미래 지원 중단
· $< 및 $> 교환
향후 지원 중단에 대한 자세한 내용은 관련 RT 티켓을 참조하세요.
.
· SFIO, stdio
Perl은 stdio 또는 sfio 래퍼를 사용하여 PerlIO 없이도 빌드되는 것을 지원합니다.
대신에. 이와 같은 Perl 빌드는 IO 레이어를 지원하지 않으므로 유니코드 IO도 지원하지 않습니다.
오히려 장애인이 되는 거죠.
PerlIO는 stdio 사용이 필요한 경우 "stdio" 레이어를 지원하며 마찬가지로 sfio 레이어도 지원합니다.
생산될 수 있었습니다.
· 정규식에서 이스케이프되지 않은 리터럴 "{".
v5.20부터 리터럴 "{"를 이스케이프 처리하도록 요구할 계획입니다. 예를 들어
앞에 백슬래시를 붙입니다. v5.18에서는 더 이상 사용되지 않는 경고 메시지가 표시됩니다.
그러한 모든 용도로 방출됩니다. 이는 리터럴과 일치하는 패턴에만 영향을 미칩니다.
"{". 수량자 또는 시퀀스의 일부와 같은 이 문자의 다른 용도
아래 항목은 전혀 영향을 받지 않습니다.
/foo{3,5}/
/\p{알파벳}/
/\N{숫자 XNUMX}
이것을 제거하면 Perl의 패턴 구문이 확장되고 더 나은 오류가 허용됩니다.
기존 구문을 확인합니다. 예를 보려면 perlre의 "정량자"를 참조하세요.
· 다른 이스케이프와 결합할 때 큰따옴표 문자열의 "\Q" 의미 체계를 개선합니다.
"\Q"와 이스케이프 조합과 관련된 몇 가지 버그와 불일치가 있습니다.
예를 들어 "\Q...\E" 쌍 내에서는 "\x", "\L" 등과 같습니다. 이러한 문제를 해결해야 하며 그렇게 하면
현재의 행동을 필연적으로 바꿀 것입니다. 변경 사항이 아직 해결되지 않았습니다.
호환되지 않는 변경
이달의 스페셜 블록 라는 in 무효화 문맥
이제 특수 블록("BEGIN", "CHECK", "INIT", "UNITCHECK", "END")이 무효로 호출됩니다.
문맥. 이는 마지막 명령문 [perl #108794]의 결과를 낭비적으로 복사하는 것을 방지합니다.
The "과부하" 프라그마 그리고 정규 표현식 사물
"오버로딩 없음"을 사용하면 "qr//"에서 반환된 정규식 개체가 이제 문자열화됩니다.
"정규식=REGEXP(0xbe600d)" 대신 정규식 자체를 사용합니다[perl #108780].
두 XS 타입맵 항목 제거
사용되지 않은 것으로 추정되는 두 개의 XS 유형 맵 항목이 핵심 유형 맵에서 제거되었습니다.
T_DATAUNIT 및 T_CALLBACK. 혹시라도 이 제품을 사용하고 계시다면 다음을 참조하세요.
perlxstypemap에서 복원하는 방법에 대한 지침입니다.
유니 코드 6.1 이 비 호환성 과 유니 코드 6.0
위의 "(거의) 유니코드 6.1 지원"에 자세히 설명되어 있습니다. 이 버전을 컴파일할 수 있습니다.
Unicode 6.0을 사용하려면 Perl을 사용하세요. "이전 유니코드 버전에서 작동하도록 Perl 해킹하기(for
매우 심각한 해커에게만 해당)"를 perlunicode로 표시합니다.
볼랜드 컴파일러
Borland 컴파일러에 대한 모든 지원이 중단되었습니다. 코드가 오랫동안 작동하지 않았습니다
어쨌든 시간.
어떤 사용되지 않는 유니 코드 속성 are 아니 이상 되지 않습니다. by 디폴트 값
Perl은 유니코드에서 사용되는 특정 유니코드 속성을 노출해서는 안 됩니다.
내부적으로만 사용할 수 있으며 공개적으로 사용할 수 없습니다. 이를 사용하면 더 이상 사용되지 않습니다.
Perl 5.12 이후 경고 메시지. 제거된 속성은 Other_Alphabetic입니다.
Other_Default_Ignorable_Code_Point, Other_Grapheme_Extend, Other_ID_Continue,
Other_ID_Start, Other_Lowercase, Other_Math 및 Other_Uppercase.
Perl은 이들 중 일부 또는 전부를 포함하도록 다시 컴파일될 수 있습니다. 지침은 "유니코드
Perluniprops의 Perl에서 허용되지 않는 문자 속성"입니다.
역참조 IO 물건들 as 타이프글로브
"*{...}" 연산자는 IO 사물에 대한 참조를 전달하는 경우(예: "*{*STDIN{IO}}")
해당 IO 객체만 포함하는 새로운 typeglob을 생성합니다. 이전에는 다음과 같이 문자열화되었습니다.
빈 문자열이지만 일부 연산자는 이를 정의되지 않은 것으로 처리하여
"초기화되지 않은" 경고. 이제 __ANONIO__ [perl #96326]으로 문자열화됩니다.
Handshake 대소문자 변경 운영
이 기능은 Perl 5.14에서 더 이상 사용되지 않으며 현재 제거되었습니다. CPAN 모듈
Unicode::Casing은 이 기능의 단점 없이 더 나은 기능을 제공합니다.
5.14 문서에 자세히 설명되어 있습니다.
<http://perldoc.perl.org/5.14.0/perlunicode.html#User-Defined-Case-Mappings-%28for-serious-hackers-only%29>
XSUB are 지금 '공전'
XSUB C 함수는 이제 '정적'입니다. 즉, XSUB C 함수는 외부에서 볼 수 없습니다.
컴파일 유닛. 사용자는 새로운 "XS_EXTERNAL(이름)" 및 "XS_INTERNAL(이름)"을 사용할 수 있습니다.
원하는 연결 동작을 선택하는 매크로입니다. 에 대한 일반적인 "XS(이름)" 선언
XSUB는 호환성을 위해 계속해서 비'정적' XSUB를 선언하지만 XS 컴파일러는
ExtUtils::ParseXS("xsubpp")는 기본적으로 '정적' XSUB을 방출합니다. ExtUtils::ParseXS의
"EXPORT_XSUB_SYMBOLS" 키워드를 사용하여 XS에서 동작을 재구성할 수 있습니다. Perlx 참조
를 참조하세요
약화 읽기 전용 참조
읽기 전용 참조 약화는 더 이상 허용되지 않습니다. 절대 효과가 없었어야 했어
어쨌든 때로는 충돌이 발생할 수 있습니다.
매는 스칼라 그 보유 타이프글로브
typeglob이 할당된 후 스칼라를 연결하려고 시도하면 대신 연결됩니다.
typeglob의 IO 슬롯에서 처리합니다. 이는 스칼라를 묶는 것이 불가능하다는 것을 의미했습니다.
그 자체. 유사한 문제가 "tied" 및 "untie"에 영향을 미침: "tied $scalar"는 false를 반환합니다.
마지막으로 반환된 것이 typeglob인 경우 묶인 스칼라에 대해, 그러한 유형에 대해 "$scalar 풀기"
묶인 스칼라는 아무 일도 하지 않습니다.
Perl 5.14.0 이전에 이 문제를 해결했지만 일부 CPAN 모듈에서 문제가 발생했습니다.
그래서 우리는 대신 지원 중단 주기를 설정했습니다.
이제 지원 중단이 제거되었으며 이 버그가 수정되었습니다. 따라서 "$scalar 연결"은
항상 손잡이가 아닌 스칼라를 묶으십시오. 핸들을 묶으려면 "tie *$scalar"를 사용하십시오.
(명시적인 별표 포함) "tied *$scalar" 및 "untie *$scalar"에도 동일하게 적용됩니다.
IPC :: Open3 아니 이상 제공 "x포크()", "xclose_on_exec()" 그리고 "xpipe_anon()"
세 가지 기능은 모두 비공개이고 문서화되지 않았으며 내보내지지 않았습니다. 그들은 아닌 것 같습니다
CPAN의 모든 코드에서 사용됩니다. 두 개는 인라인되었고 하나는 완전히 삭제되었습니다.
$$ 아니 이상 캐시 PID
예전에는 전화하면 포크(3) C에서 Perl의 $$ 개념은 다음과 동기화되지 않을 수 있습니다.
뭐 getpid() 보고. 항상 다음을 통해 $$의 값을 가져옵니다. getpid(), 이 잠재력
버그가 제거되었습니다. 캐싱 동작에 의존하는 코드는 중단됩니다. 에 설명된 대로
Core Enhancements, $$는 이제 쓰기 가능하지만 포크 중에 재설정됩니다.
$$ 그리고 "getppid()" 아니 이상 에뮬레이트하다 POSIX 의미론 아래에 Linux스레드
더 이상 사용되지 않는 LinuxThreads 구현에서 $$ 및 "getppid()"의 POSIX 에뮬레이션
제거 되었어. 이는 Linux 2.4 사용자와 Debian GNU/kFreeBSD 사용자에게만 영향을 미칩니다.
NPTL을 사용하는 대부분의 Linux 설치는 아니지만 최대 6.0 포함
스레드.
이는 $$와 마찬가지로 "getppid()"가 이제 항상 OS의 아이디어를 반환한다는 것을 보장한다는 의미입니다.
Perl의 캐시된 버전이 아닌 프로세스의 현재 상태입니다.
자세한 내용은 $$ 문서를 참조하세요.
$<, $>, $( 그리고 $) are 아니 이상 캐시 된
$$ 및 "getppid()"에 대한 변경과 유사하게 $<, $>, $( 및 $)의 내부 캐싱
제거 되었어.
우리가 이러한 값을 캐시하면 그 값이 무엇인지에 대한 우리의 생각이 동기화되지 않을 것입니다.
현실은 누군가(예: Perl을 내장한 누군가) 업데이트 없이 "sete?[ug]id()"를 호출한 경우입니다.
"PL_e?[ug]id". 이러한 복잡성을 처리하는 것은 가격이 저렴하다는 점을 고려할 때 그만한 가치가 없었습니다.
"gete?[ug]id()" 시스템 호출입니다.
이 변경으로 인해 XS 수준 "PL_uid", "PL_gid"를 사용하는 소수의 CPAN 모듈이 중단됩니다.
"PL_euid" 또는 "PL_egid" 변수.
이러한 손상에 대한 수정은 "PerlProc_gete?[ug]id()"를 사용하여 이를 검색하는 것입니다(예:
"PerlProc_getuid()"), 그리고 변경하면 "PL_e?[ug]id"에 할당하지 않습니다.
UID/GID/EUID/EGID. Perl은 항상 검색하므로 더 이상 그렇게 할 필요가 없습니다.
OS에서 해당 값의 최신 버전입니다.
어느 비 ASCII 문자 얻을 인용 된 by "인용문" 그리고 "\큐" 이 변경
Perl은 특별한 의미를 부여하지 않기 때문에 이것이 실제 문제를 일으킬 가능성은 없습니다.
ASCII가 아닌 문자이므로 인용 여부는 현재 관련이 없습니다. 이것
변경 사항은 버그 [perl #77654]를 수정하고 Perl의 동작을 Unicode의 동작과 더 일치하게 만듭니다.
추천. perlfunc의 "quotemeta"를 참조하세요.
성능 개선
· 정규식의 유니코드 속성 성능이 향상되었습니다.
유니코드 속성에 대한 코드 포인트 일치는 이제 이진 검색을 통해 수행됩니다.
선형 대신. 이는 예를 들어 1000개 항목에 대한 최악의 경우를 의미합니다.
속성은 10개가 아닌 1000개의 프로브입니다. 이러한 비효율성은
특정 프로브의 결과와 함께 해시에 영구적으로 저장하여 과거를
인접한 코드 포인트가 64개라는 이론에 따라 인접한 XNUMX개 코드 포인트에 대한 결과
검색될 가능성이 높습니다. 유니코드가 언급될 때마다 별도의 해시가 사용되었습니다.
각 정규식의 속성입니다. 따라서 "qr/\p{foo}abc\p{foo}/"는 두 개의
해시. 한 인스턴스의 모든 프로브는 다른 인스턴스에 알려지지 않으며 해시는
정규식이 여러 곳에서 사용된다면 별도로 확장되어 상당히 커질 수 있습니다.
널리 분리된 서로 다른 코드 포인트. 그러나 이제 해시는 하나만 공유됩니다.
특정 속성의 모든 인스턴스를 기준으로 합니다. 이는 "\p{foo}"가 일치하는 경우를 의미합니다.
스레드의 하나의 정규식에 "A"가 있으면 결과가 즉시 모든 사람에게 알려집니다.
정규식을 사용하고 메모리를 소모하는 끊임없는 행진이 느려집니다.
상당히.
· "use" 키워드(예: "use 5.012")를 사용한 버전 선언이 이제 더 빨라졌습니다.
로딩하지 않고 기능을 활성화합니다 feature.pm.
· "local $_"는 더 이상 진행되지 않는 마법을 통해 반복하지 않으므로 이제 더 빨라졌습니다.
어쨌든 복사하세요.
· Perl 5.12.0은 클래스가 빈 "DESTROY"를 정의하는 객체의 소멸 속도를 높였습니다.
(자동 로딩을 방지하기 위해) 단순히 빈 메소드를 호출하지 않음으로써 가능합니다. 이것
릴리스에서는 "DESTROY" 메소드를 호출하지 않음으로써 이 최적화를 한 단계 더 발전시켰습니다.
"return" 문으로 시작됩니다. 이는 다음과 같은 소멸자에 유용할 수 있습니다.
디버깅에만 사용됩니다.
상수 DEBUG => 1을 사용하십시오.
sub DESTROY { 디버그하지 않는 한 반환; ... }
상수 접기는 첫 번째 명령문을 "return;"으로 줄입니다. DEBUG가 0으로 설정된 경우
이 최적화를 트리거합니다.
· 이제 typeglob 또는 쓰기 시 복사 스칼라를 보유하는 변수에 할당하는 것이 훨씬 더 쉬워졌습니다.
더 빠르게. 이전에는 typeglob이 문자열화되었거나 쓰기 시 복사 스칼라였습니다.
클로버되기 전에 복사됩니다.
· void 컨텍스트에서 "substr"에 대한 할당 속도는 이제 이전 속도의 두 배 이상입니다.
특수한 lvalue 스칼라를 생성하고 반환하는 대신에 할당됩니다.
"substr"은 원래 문자열 자체를 수정합니다.
· "substr"은 void 컨텍스트에서 호출될 때 더 이상 반환할 값을 계산하지 않습니다.
· File::Glob의 변경으로 인해 Perl의 "glob" 함수와 이에 상응하는 "<...>" 함수는 다음과 같습니다.
이제 훨씬 빨라졌습니다. 패턴을 단어로 나누는 것이 C로 다시 작성되었습니다.
어떤 경우에는 속도가 20% 향상됩니다.
File::Glob을 사용하지 않으므로 VMS의 "glob"에는 영향을 미치지 않습니다.
· 연결될 때 단락 연산자 "&&", "||" 및 "//"(예: "$a || $b
|| $c"), Optree 감소로 인해 단락이 훨씬 더 빨라졌습니다.
순회.
· "s///r"을 구현하면 스칼라 값의 복사본이 하나 줄어듭니다.
· lvalue 스칼라 컨텍스트에서 lvalue 서브루틴에 대한 재귀 호출은 메모리를 덜 사용합니다.
모듈 그리고 프라그 마타
추천하지 않습니다 모듈
버전::요구사항
버전::요구사항은 이제 더 이상 사용되지 않습니다. CPAN::Meta::Requirements를 사용하세요.
드롭인 교체. v5.17.0에서는 perl.git blead에서 삭제됩니다.
신제품 모듈 그리고 프라그 마타
· arybase - 이 새로운 모듈은 $[ 변수를 구현합니다.
· PerlIO::mmap 0.010이 Perl 코어에 추가되었습니다.
"mmap" PerlIO 레이어는 더 이상 Perl 자체로 구현되지 않지만 이동되었습니다.
새로운 PerlIO::mmap 모듈로 이동합니다.
업데이트 모듈 그리고 프라그 마타
이는 선택된 모듈 업데이트의 개요일 뿐입니다. 전체 업데이트 목록을 보려면 다음을 실행하세요.
$ corelist --diff 5.14.0 5.16.0
5.14.0 대신 원하는 버전으로 대체할 수도 있습니다.
· Archive::Extract가 버전 0.48에서 0.58로 업그레이드되었습니다.
"에 있는 경우에만 "unzip"을 사용하도록 FreeBSD에 대한 수정 사항이 포함되어 있습니다./ usr / local / bin",
FreeBSD 9.0은 "에서 제한된 "압축 해제" 기능을 제공합니다./ usr / bin".
· Archive::Tar가 버전 1.76에서 1.82로 업그레이드되었습니다.
8GB(>0777777777777 XNUMX진수)보다 큰 파일을 처리하도록 조정하고
아카이브에 있는 파일의 MD5SUM입니다.
· 기본 버전이 2.16에서 2.18로 업그레이드되었습니다.
"base"는 로드된 모듈이 로드되지 않을 때 더 이상 모듈의 $VERSION을 "-1"로 설정하지 않습니다.
$VERSION을 정의합니다. "-1"이 유효한 버전이 아니기 때문에 이렇게 변경되었습니다.
"UNIVERSAL::VERSION"에서 내부적으로 사용되는 새로운 "느슨한" 기준에 따른 번호입니다. (보다
"느슨한" 버전 기준에 대한 자세한 내용은 버전을 참조하세요.)
"base"는 더 이상 이미 로드된 모듈 로드를 내부적으로 건너뛰지 않고 대신
%INC를 검사하기 위해 "require"를 사용합니다. 코드와 함께 "base"를 사용할 때 발생하는 버그를 수정합니다.
모듈을 강제로 다시 로드하려면 %INC를 지웁니다.
· 잉어가 버전 1.20에서 1.26으로 업그레이드되었습니다.
이제 마지막으로 읽은 파일 핸들 정보가 포함되고 파일과 줄 뒤에 점을 넣습니다.
"die" [perl #106538]의 오류와 같습니다.
· charnames가 버전 1.18에서 1.30으로 업데이트되었습니다.
"charnames"는 이제 기존 옵션과 같은 새로운 옵션인 ":loose"를 사용하여 호출할 수 있습니다.
":full" 옵션을 사용하지만 유니코드 느슨한 이름 일치를 활성화합니다. 자세한 내용은 "LOOSE"에 있습니다.
MATCHES"를 문자 이름으로 사용합니다.
· B::Deparse가 버전 1.03에서 1.14로 업그레이드되었습니다. 이것은 수많은 deparsing을 수정합니다.
버그.
· CGI가 버전 3.52에서 3.59로 업그레이드되었습니다.
CGI::Fast에서 공개되고 문서화된 FCGI.pm API를 사용합니다. CGI::Fast는
XNUMX년 이상 전에 더 이상 사용되지 않고 문서에서 제거된 FCGI API입니다.
FCGI >= 0.70 또는 FCGI <= 0.73에서 더 이상 사용되지 않는 이 API를 사용하면 보안이 도입됩니다.
문제.
<http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-2766>
코드를 손상시킬 수 있는 사항:
"url()"이 명시적으로 요청되면 "PATH_INFO"를 반환하도록 수정되었습니다.
"path=>1" 또는 "path_info=>1" 플래그.
코드가 mod_rewrite(또는 호환 가능)에서 실행 중이고 호출하는 경우
"self_url()" 또는 "url()"을 호출하고 "path_info=>1"을 전달하는 경우 이러한 메서드는
명시적으로 요청한 대로 실제로 "PATH_INFO"를 반환하거나
"self_url()"이(가) 귀하를 대신하여 요청했습니다.
문제가 발생한 이후 해당 URL에서는 "PATH_INFO"가 생략되었습니다.
3.12년 2005월 XNUMX 릴리스.
이 버그는 너무 오래되어 애플리케이션이 이에 의존하거나 해결하게 되었을 수도 있습니다.
이 릴리스로 업그레이드하기 전에 애플리케이션을 확인하십시오.
영향을 받는 메서드 호출의 예:
$q->url(-absolute => 1, -query => 1, -path_info => 1);
$q->url(-경로=>1);
$q->url(-full=>1,-path=>1);
$q->url(-rewrite=>1,-path=>1);
$q->self_url();
Content-Length가 설정되지 않은 경우 더 이상 STDIN에서 읽지 않으므로 요청이 방지됩니다.
때로는 정지로 인해 Content-Length가 없습니다. 이는 CGI RFC와 일치합니다.
3875이며 CGI::Simple과도 일치합니다. 그러나 이전 동작에는 다음과 같은 문제가 있을 수 있습니다.
CGI.pm의 일부 명령줄 사용에서 예상된 것입니다.
또한 이제 DELETE HTTP 동사가 지원됩니다.
· Compress::Zlib가 버전 2.035에서 2.048로 업그레이드되었습니다.
IO::Compress::Zip 및 IO::Uncompress::Unzip은 이제 LZMA(방법 14)를 지원합니다.
IO::Compress::Unzip의 CRC 문제에 대한 수정 사항이 있으며 Streamed Stored를 지원합니다.
지금 상황. 콘텐츠 크기가 다음과 같을 때 IO::Compress::Zip의 Zip64 문제를 해결했습니다.
정확히 0xFFFFFFFF입니다.
· Digest::SHA가 버전 5.61에서 5.71로 업그레이드되었습니다.
addfile 메소드 및 shasum에 BITS 모드를 추가했습니다. 이렇게 하면 부분 바이트 입력이 생성됩니다.
파일/STDIN을 통해 가능하며 shasum이 모든 8074 NIST Msg 벡터를 확인할 수 있습니다.
이전에는 이를 수행하기 위해 특별한 프로그래밍이 필요했습니다.
· 인코딩이 버전 2.42에서 2.44로 업그레이드되었습니다.
누락된 별칭이 추가되고, 심각한 재귀 오류가 수정되었으며, 다양한 문서가 업데이트되었습니다.
Unicode.xs의 'decode_xs n바이트 힙 오버플로' 보안 버그를 해결했습니다(CVE-2011-2939).
(5.14.2)
· ExtUtils::CBuilder가 버전 0.280203에서 0.280206으로 업데이트되었습니다.
새 버전에서는 CFLAGS 및 LDFLAGS를 해당 Config.pm 항목에 추가합니다.
· ExtUtils::ParseXS가 버전 2.2210에서 3.16으로 업그레이드되었습니다.
XS 컴파일러 "xsubpp" 뒤에 있는 모듈인 ExtUtils::ParseXS의 대부분이 다시 작성되었습니다.
그리고 청소했다. 좀 더 확장 가능하게 만들어졌으며 이제 마침내 다음을 사용합니다.
협착.
typemap 논리는 별도의 모듈인 ExtUtils::Typemaps로 이동되었습니다. "새로운
모듈 및 Pragmata", 위.
전체 변경 사항을 보려면 ExtUtils::ParseXS 변경 로그를 참조하세요.
CPAN에서.
· 파일::Glob이 버전 1.12에서 1.17로 업그레이드되었습니다.
Windows에서 물결표(~) 확장은 이제 "USERPROFILE" 환경 변수를 확인합니다.
"HOME"을 확인한 후.
":glob"을 대체하기 위한 새로운 ":bsd_glob" 내보내기 태그가 있습니다. ":glob"처럼요
glob 패턴을 단어로 분할하지 않는 함수로 "glob"을 재정의하지만,
":glob"과 달리 마지막 항목을 반환하는 대신 스칼라 컨텍스트에서 올바르게 반복합니다.
파일.
Perl의 자체 "glob" 연산자(File::Glob를 사용하는)에 영향을 미치는 다른 변경 사항이 있습니다.
내부적으로(VMS 제외) "성능 향상" 및 "선택된 버그 수정"을 참조하십시오.
· FindBin이 버전 1.50에서 1.51로 업데이트되었습니다.
현재 스크립트와 동일한 이름의 스크립트가 있어도 더 이상 잘못된 결과를 반환하지 않습니다.
경로에 존재하며 실행 가능합니다.
· HTTP::Tiny가 버전 0.012에서 0.017로 업그레이드되었습니다.
$ENV{http_proxy}를 사용하여 기본 프록시 호스트를 설정하기 위한 지원이 추가되었습니다.
모든 일반적인 HTTP 동사에 대한 추가 단축 메서드인 "post_form()" 메서드를 추가합니다.
POST-ing x-www-form-urlencoded 데이터 및 "www_form_urlencode()" 유틸리티 메소드용.
· IO는 버전 1.25_04에서 1.25_06으로, IO::Handle은 버전 1.31에서 업그레이드되었습니다.
1.33합니다.
이러한 업그레이드는 IO::Handle의 "getline" 및 "getlines" 문제를 함께 해결합니다.
행동 양식. 특수 ARGV 핸들에서 이러한 메서드가 호출되면 다음 파일은 다음과 같습니다.
내장된 "<>" 및 "readline" 기능과 마찬가지로 자동으로 열립니다.
그러나 내장된 메소드와 달리 이러한 메소드는 호출자의 사용을 존중하지 않았습니다.
pragma를 열고 새로 열린 파일에 적절한 I/O 레이어를 적용합니다.
[rt.cpan.org #66474].
· IPC::Cmd가 버전 0.70에서 0.76으로 업그레이드되었습니다.
이제 명령 출력("STDOUT" 및 "STDERR" 모두) 캡처가 다음을 사용하여 지원됩니다.
IPC::Run이 필요하지 않은 MSWin3의 IPC::Open32.
· IPC::Open3이 버전 1.09에서 1.12로 업그레이드되었습니다.
*STDIN, *STDOUT 또는 *STDERR일 때 Windows에서 "open3" 사용을 방해하는 버그 수정
현지화되어 있었습니다.
Windows에서 숫자 파일 설명자의 복제를 방지하는 버그를 수정합니다.
프로그램 이름에 "-"가 포함된 "open3"이 다시 한 번 작동합니다. 버전이 깨졌네요
1.06(따라서 Perl 5.14.0) [perl #95748].
· Locale::Codes가 버전 3.16에서 3.21로 업그레이드되었습니다.
언어 확장 코드(langext) 및 언어 변형 코드(langvar)를 다음과 같이 추가했습니다.
IANA 언어 레지스트리에 정의되어 있습니다.
ISO 639-5의 언어 코드가 추가되었습니다.
IANA 언어 하위 태그 레지스트리에서 언어/스크립트 코드를 추가했습니다.
초기화되지 않은 값 경고를 수정했습니다[rt.cpan.org #67438].
all_XXX_codes 및 all_XXX_names 함수의 반환 값을 수정했습니다. [rt.cpan.org
#69100].
Locale::MODULE을 Locale::Codes::MODULE로 이동하여 모듈을 재구성했습니다.
더 깨끗한 향후 추가. 원래 XNUMX개의 모듈(Locale::Language,
Locale::Currency, Locale::Country, Locale::Script)는 계속 작동하지만 모두 새로운 기능입니다.
코드 세트는 Locale::Codes 네임스페이스에 추가됩니다.
code2XXX, XXX2code, all_XXX_codes 및 all_XXX_names 함수는 이제 폐기된 기능을 지원합니다.
코드. 이제 모든 코드 세트는 상수나 이름으로 지정할 수 있습니다. 이전에,
상수로만 지정되었습니다.
alias_code 함수는 이전 버전과의 호환성을 위해 존재합니다. 다음으로 대체되었습니다.
이름 바꾸기_국가_코드. alias_code 함수는 얼마 후 제거됩니다.
월, 2013.
이제 모든 작업은 중앙 모듈(Locale::Codes)에서 수행됩니다. 이전에는 일부
여전히 래퍼 모듈(Locale::Codes::*)에서 수행됩니다. 언어군 코드가 추가되었습니다.
(langfam)은 ISO 639-5에 정의되어 있습니다.
· Math::BigFloat가 버전 1.993에서 1.997로 업그레이드되었습니다.
정규화된 Perl 숫자를 반환하도록 "numify" 메서드가 수정되었습니다(결과
문자열 [rt.cpan.org #0] 대신 "66732 + $thing").
· Math::BigInt가 버전 1.994에서 1.998로 업그레이드되었습니다.
"babs" 메서드를 보완하는 새로운 "bsgn" 메서드를 제공합니다.
내부 "objectify" 기능의 "외부 개체" 처리를 수정하여
적절한 클래스(Math::BigInt 또는 Math::BigFloat)로 변환됩니다.
· Math::BigRat이 버전 0.2602에서 0.2603으로 업그레이드되었습니다.
-1/2를 포함하는 Math::BigRat 객체의 "int()"는 이제 다음을 포함하는 Math::BigInt를 생성합니다.
-0이 아닌 0입니다. Math::BigInt는 음수 XNUMX도 지원하지 않으므로 결과는
개체의 형식이 실제로 잘못되었습니다[perl #95530].
· Math::Complex는 버전 1.56에서 1.59로, Math::Trig는 버전에서 업그레이드되었습니다.
1.2에 1.22.
수정 사항은 다음과 같습니다: 올바른 복사 생성자 사용; 숫자로 극좌표 형식 수정
형식 지정자; 그리고 더 안정적인 "great_circle_direction" 알고리즘.
· Module::CoreList가 버전 2.51에서 2.66으로 업그레이드되었습니다.
"corelist" 유틸리티는 이제 Perl 릴리스를 표시하기 위한 "-r" 옵션을 이해합니다.
날짜와 "--diff" 옵션을 사용하여 두 Perl 간의 Modlib 변경 사항 집합을 인쇄합니다.
분포.
· 모듈::메타데이터가 버전 1.000004에서 1.000009로 업그레이드되었습니다.
CPAN META를 생성하기 위해 "제공" 메소드를 추가하여 데이터 구조를 올바르게 제공합니다. 사용
"package_versions_from_directory"는 권장되지 않습니다.
· ODBM_File이 버전 1.10에서 1.12로 업그레이드되었습니다.
XS 코드는 이제 "PERL_NO_GET_CONTEXT"로 컴파일되어 성능에 도움이 됩니다.
스레드 아래에 있습니다.
· open이 버전 1.08에서 1.10으로 업그레이드되었습니다.
":std" 없이 호출하면 더 이상 표준 핸들의 레이어가 꺼지지 않습니다.
지령. 마찬가지로 호출되면 과 ":std" 지시어를 사용하면 이제 레이어가 지워집니다.
STDIN 및 STDOUT [perl #92728]뿐만 아니라 새로운 것을 적용하기 전의 STDERR.
· 과부하가 버전 1.13에서 1.18로 업그레이드되었습니다.
"overload::Overloaded"는 더 이상 클래스에서 "can"을 호출하지 않지만 다른 방법을 사용하여
객체에 과부하가 있는지 확인합니다. 전화하는 것이 결코 정확하지 않았습니다.
오버로드는 AUTOLOAD를 따르지 않으므로 "can"입니다. 따라서 메서드를 자동 로드하는 클래스와
"can"을 구현하면 더 이상 오버로드를 고려할 필요가 없습니다[perl #40333].
이제 유효하지 않은 인수에 대해 경고가 생성됩니다. "새 진단"을 참조하십시오.
· PerlIO::scalar가 버전 0.11에서 0.14으로 업그레이드되었습니다.
("open $fh, '>', \$scalar"를 구현하는 모듈입니다.)
$scalar가 복사본인 경우 "open my $fh, ">", \$scalar"가 작동하지 않는 문제를 해결합니다.
쓰기 중 스칼라. (5.14.2)
또한 typeglob이 있는 경우 "readline" 또는 "<$fh>"에서 발생하는 중단 문제를 수정합니다.
$scalar [perl #92258]에 할당되었습니다.
더 이상 "탐색" 중에 $scalar가 내부적으로 문자열이라고 가정하지 않습니다. 그렇지 않은 경우
크래시가 발생하는 경우가 거의 발생했습니다[perl #92706]. 또한 내부 인쇄 루틴은
이상은 "seek"에 의해 설정된 위치가 유효하다고 가정하지만 문자열을 다음으로 확장합니다.
해당 위치, 중간 바이트 채우기(이전 길이와 탐색 사이)
position)을 null로 사용합니다[perl #78980].
이제 $scalar에 참조가 있는 경우 메모리 내 핸들로 인쇄가 작동합니다.
참조를 수정하기 전에 참조를 문자열화합니다. 참조는 다음과 같이 취급되었습니다.
빈 문자열.
$scalar에
내부적으로는 번호가 있지만 문자열 버퍼는 없습니다.
메모리 내 핸들로 인쇄하면 더 이상 일반 핸들을 혼동시키는 스칼라가 생성되지 않습니다.
표현 엔진 [perl #108398].
· Pod::Functions가 버전 1.04에서 1.05로 업그레이드되었습니다.
기능.pm 이제 주석에서 Perl 빌드 시 생성됩니다. perlfunc.pod.
이렇게 하면 Pod::Functions 및 perlfunc가 동기화 상태로 유지됩니다.
· Pod::Html이 버전 1.11에서 1.1502로 업그레이드되었습니다.
이는 내부적으로 Pod::Simple을 사용하기 위해 Pod::Html을 광범위하게 재작성한 것입니다. 그만큼
출력이 크게 변경되었습니다.
· Pod::Perldoc가 버전 3.15_03에서 3.17로 업그레이드되었습니다.
VMS [perl #90640]의 검색 경로를 수정합니다. (5.14.1)
The -v 옵션은 이제 $0에 대한 올바른 섹션을 가져옵니다.
이 업그레이드에는 여러 가지 중요한 수정 사항이 포함되어 있습니다. CPAN의 변경 로그를 참조하세요.
자세한 정보.
· POSIX가 버전 1.24에서 1.30으로 업그레이드되었습니다.
POSIX는 더 이상 AutoLoader를 사용하지 않습니다. 이 구현에 의존하는 모든 코드
세부 사항에는 버그가 있었고 이 변경으로 인해 실패할 수 있습니다. 모듈의 Perl 코드에는
크게 단순화되어 라인 수를 대략 절반으로 줄였습니다.
기능. 공유 파일의 크기를 줄이기 위해 XS 코드가 리팩터링되었습니다.
기능에는 변화가 없이 약 12% 정도 개체가 감소했습니다. 이제 더 많은 POSIX 기능이 있습니다.
테스트.
"sigsuspens" 및 "pause"는 이제 반환하기 전에 신호 처리기를 실행합니다.
이 두 가지 기능 중 하나는 신호가 도착할 때까지 기다렸다가 반환하는 것입니다. 시간 내에 it
트리거되었습니다. 지연된 또는 "안전한" 신호로 인해 이러한 일이 발생하지 않았습니다.
경쟁 조건이 발생할 수 있습니다 [perl #107216].
"POSIX::sleep"은 이제 기본 OS "sleep" 함수에 대한 직접 호출입니다.
"CORE::sleep"에 대한 Perl 래퍼가 되는 것입니다. "POSIX::dup2"는 이제 올바른 값을 반환합니다.
Win32에서(즉, 파일 설명자). "POSIX::SigSet" "sigsuspens" 및 "sigpending"
및 "POSIX::pause"는 이제 해당 위치로 돌아가기 직전에 안전한 신호를 발송합니다.
방문객.
"POSIX::Termios::setattr"은 이제 세 번째 인수의 기본값을 0이 아닌 "TCSANOW"로 설정합니다.
대부분의 플랫폼에서 "TCSANOW"는 0으로 정의되지만 일부 0은 유효하지 않습니다.
매개변수로 인해 기본값 호출이 실패했습니다.
· 소켓이 버전 1.94에서 2.001로 업그레이드되었습니다.
IPv6 소켓을 처리하기 위한 새로운 기능과 상수가 있습니다.
pack_ipv6_mreq
unpack_ipv6_mreq
IPV6_ADD_MEMBERSHIP
IPV6_DROP_MEMBERSHIP
IPV6_MTU
IPV6_MTU_DISCOVER
IPV6_MULTICAST_HOPS
IPV6_MULTICAST_IF
IPV6_MULTICAST_LOOP
IPV6_UNICAST_HOPS
IPV6_V6만
· Storable이 버전 2.27에서 2.34로 업그레이드되었습니다.
고정 및 정지 시 더 이상 쓰기 중 복사 스칼라를 읽기 전용 스칼라로 바꾸지 않습니다.
해동.
· Sys::Syslog가 버전 0.27에서 0.29로 업그레이드되었습니다.
이 업그레이드로 인해 해결되지 않은 많은 버그가 해결되었습니다.
· Term::ANSIColor가 버전 3.00에서 3.01로 업그레이드되었습니다.
초기 배열 참조는 초기 배열 참조가 아닌 색상 목록으로만 해석됩니다.
참조를 통해 색상 기능이 다음과 같은 개체에 대해 제대로 작동하도록 허용합니다.
문자열화가 정의되었습니다.
· Term::ReadLine이 버전 1.07에서 1.09로 업그레이드되었습니다.
Term::ReadLine은 이제 게시되지 않은 이벤트 루프와 단순 이벤트 루프를 포함한 모든 이벤트 루프를 지원합니다.
IO::Select, 특정 항목에 대해 기존 코드를 다시 작성할 필요 없이 반복됩니다.
프레임워크 [perl #108470].
· 스레드::공유가 버전 1.37에서 1.40으로 업그레이드되었습니다.
공유 객체의 소멸자는 객체가 다음과 같은 경우 때때로 무시되었습니다.
공유 데이터 구조에서만 참조됩니다. 대부분 해결되었으나
전역 소멸 시 개체가 여전히 존재하는 경우 소멸자는 여전히 무시될 수 있습니다.
[펄 #98204].
· Unicode::Collate가 버전 0.73에서 0.89로 업그레이드되었습니다.
CLDR 1.9.1로 업데이트됨
CLDR 2.0으로 업데이트된 로케일: mk, mt, nb, nn, ro, ru, sk, sr, sv, uk, zh__pinyin,
zh__스트로크
새로 지원되는 로케일: bn, fa, ml, mr, or, pa, sa, si, si__dictionary, sr_Latn,
sv__reformed, ta, te, th, ur, wae.
로케일에 대한 맞춤형 호환성 표의 문자 및 통합 표의 문자: ja,
ko, zh__big5han, zh__gb2312han, zh__pinyin, zh__뇌졸중.
Locale/*.pl 파일은 이제 @INC에서 검색됩니다.
· Unicode::Normalize가 버전 1.10에서 1.14로 업그레이드되었습니다.
제거 수정 사항 유니코어/CompositionExclusions.txt 코어에서.
· 유니코드::UCD가 버전 0.32에서 0.43로 업그레이드되었습니다.
이는 "prop_aliases()" 및 "prop_value_aliases()"라는 네 가지 새로운 함수를 추가합니다.
속성 이름에 대한 모든 유니코드 승인 동의어를 찾거나 하나에서 변환하는 데 사용됩니다.
다른 사람에게 이름을 지정하십시오. 주어진 유니코드와 일치하는 모든 코드 포인트를 반환하는 "prop_invlist"
바이너리 속성; 그리고 주어진 전체 사양을 반환하는 "prop_invmap"
유니코드 속성.
· Win32API::파일이 버전 0.1101에서 0.1200으로 업그레이드되었습니다.
SetStdHandle 및 GetStdHandle 기능 추가
제거됨 모듈 그리고 프라그 마타
Perl 5.14.0의 릴리스 노트에서 약속한 대로 다음 모듈이 Perl XNUMX에서 제거되었습니다.
핵심 배포판이며 필요한 경우 대신 CPAN에서 설치해야 합니다.
· Devel::DProf가 Perl 코어에서 제거되었습니다. 이전 버전은 20110228.00이었습니다.
· Perl 코어에서 쉘이 제거되었습니다. 이전 버전은 0.72_01이었습니다.
· 4에서 더 이상 사용되지 않는 몇 가지 오래된 Perl5.14 스타일 라이브러리가 이제
삭제됨 :
abbrev.pl 주장.pl bigfloat.pl bigint.pl bigrat.pl 캐시아웃.pl
완전한.pl ctime.pl dotsh.pl 예외.pl fastcwd.pl 플러시.pl
getcwd.pl getopt.pl getopts.pl 호스트 이름.pl importenv.pl
lib/find{,깊이}.pl look.pl newgetopt.pl open2.pl open3.pl
pwd.pl shellwords.pl stat.pl tainted.pl termcap.pl timelocal.pl
CPAN에서는 Perl4::CoreLibs로 찾을 수 있습니다.
문서
신제품 문서
perldtrace
perldtrace는 Perl의 DTrace 지원을 설명하고 제공된 프로브 목록을 나열하며 예제를 제공합니다.
그들의 사용.
실험
이 문서는 Perl의 실험적 기능 목록을 제공하기 위한 것입니다. 그것은 아직도
진행중인 작업.
perlootut
이것은 새로운 OO 튜토리얼입니다. 기본 OO 개념에 중점을 두고 독자에게 다음을 권장합니다.
CPAN에서 OO 프레임워크를 선택합니다.
perlxstypemap
새로운 매뉴얼은 XS typemapping 메커니즘을 전례 없이 자세하게 설명하고
Perlxs에서 추출한 정보와 이전의 비공식 문서가 포함된 새로운 문서
모든 핵심 타입맵 목록.
변경 에 현존하는 문서
페라피
· HV API는 키가 UTF8에 있음을 표시하기 위해 오랫동안 음수 길이를 허용해 왔습니다. 이것
이제 문서화되었습니다.
· 이제 "boolSV()" 매크로가 문서화되었습니다.
perlfunc
· "dbmopen"은 0 모드를 존재하지 않는 파일이
생성되고 있습니다. 이는 Perl 5.000 이후부터 발생했지만 문서화된 적은 없습니다.
어딘가에. 이제 perlfunc 항목에 [perl #90064]가 언급되어 있습니다.
· 기록상 우연히 "open $fh, '<:', ..."는 기본 레이어를 적용합니다.
플랫폼(Unix에서는 ":raw", Windows에서는 ":crlf")에 의해 선언된 내용은 모두 무시됩니다.
open.pm. 이것은 매우 유용한 기능인 것 같습니다. perlfunc 및
오픈.
· "분할" 항목이 다시 작성되었습니다. 이제 이전보다 훨씬 더 명확해졌습니다.
펄거츠
· XSUB를 사용한 자동 로딩이라는 새로운 섹션이 추가되었습니다.
자동 로드된 하위 이름에 액세스합니다.
· perlguts의 일부 기능 설명은 혼란스러웠습니다.
설명 위 또는 아래에서 기능을 참조했습니다. 이 내용이 명확해졌습니다.
[펄 #91790].
페로브
· 이 문서는 처음부터 다시 작성되었으며 다양한 OO 개념을 다루고 있습니다.
확장되었습니다.
퍼롭
· smartmatch 연산자의 문서가 재작업되어 perlsyn에서 다음으로 이동되었습니다.
그것이 속한 곳에 perlop.
왼쪽에 있는 "undef"의 경우에도 수정되었습니다. 목록
다양한 스마트 매치 동작에 항목이 잘못된 위치에 있었습니다.
· 줄임표 문("...")의 문서가 재작업되어 다음 위치로 옮겨졌습니다.
perlsyn에 perlop.
· 비트 연산자에 대한 설명이 확장되어 작동 방식을 설명합니다.
유니코드 문자열(5.14.1).
· "m//g"에 대한 더 많은 예시가 추가되었습니다(5.14.1).
· "<<\FOO" here-doc 구문이 문서화되었습니다(5.14.1).
펄프라그마
· 이제 "%^H"에 키 이름을 지정하는 표준 규칙이 있으며 이는 키 아래에 설명되어 있습니다.
명명.
"세탁 그리고 감지 더럽혀진 데이터" in 펄초
· 오염 여부를 확인하는 예제 함수에는 미묘한 오류가 포함되어 있습니다. $@ 필요
함수 외부에서 이 전역 값이 변경되는 것을 방지하기 위해 현지화됩니다. 그만큼
이를 확인하는 기본 방법은 Scalar::Util에서 "오염된" 상태로 남아 있습니다.
펄롤
· perllol은 도입된 새로운 "push $scalar" 구문을 사용하는 예제로 확장되었습니다.
Perl 5.14.0(5.14.1)에서.
펄모드
· perlmod는 이제 일부 유형의 명시적 기호 테이블 조작을 명시적으로 명시합니다.
지원되지 않습니다. 이는 이미 실제로 있었던 일을 성문화한 것입니다 [perl #78074].
펄포드스타일
· 사용할 서식 코드에 대한 팁이 수정되어 대폭 확장되었습니다.
· 이제 POD 파일을 미리 본 후 미리 볼 수 있는 몇 가지 예제가 있습니다.
편집되었습니다.
Perlre
· 이제 "(*COMMIT)" 지시문이 오른쪽 섹션에 나열됩니다(
논의).
Perlrun
· perlrun은 대대적인 정리 작업을 거쳤습니다. 특히, -0x... 의 형태 -0
플래그가 명확해졌고 환경 변수에 대한 마지막 섹션이 추가되었습니다.
수정 및 확장(5.14.1).
펄서브
· 꽤 오랫동안 존재해 왔던 ($;) 프로토타입 구문이 이제 문서화되었습니다.
펄서브에서. 단항 함수가 목록 연산자와 동일한 우선순위를 갖도록 합니다.
펄티
· 핸들 묶기에 필요한 구문이 문서화되었습니다.
펄바
· $!에 대한 문서 수정되고 명확해졌습니다. $!
"undef"일 수 있지만 그렇지 않습니다. 시스템 호출이 설정되었는지 여부도 불분명했습니다.
C의 "errno" 또는 Perl의 $! [펄 #91614].
· $$에 대한 문서가 변경에 관한 추가 주의 사항과 함께 수정되었습니다.
프로세스 ID.
기타 변경
· perlxs는 인라인 typemap에 대한 문서화로 확장되었습니다.
· perlref에는 순환성이 어떻게 되지 않을 수 있는지 설명하는 새로운 순환 참조 섹션이 있습니다.
해제되고 약한 참조로 이를 해결하는 방법.
· perlapi의 일부가 명확해졌고 일부 C 함수에 해당하는 Perl이 추가되었습니다.
추가 설명 모드로 추가되었습니다.
· perlre 및 perlrecharclass의 일부 부분이 명확해졌습니다.
제거됨 문서
낡은 OO 문서
이전 OO 자습서인 perltoot, perltooc 및 perlboot가 제거되었습니다. 펄봇
(객체 트릭 가방) 문서도 제거되었습니다.
개발 델타
개발 릴리스용 perldelta 파일은 더 이상 perl과 함께 패키지되지 않습니다. 이들은 수 있습니다
여전히 Perl 소스 코드 저장소에서 찾을 수 있습니다.
진단
경고를 포함하여 진단 출력에 다음과 같은 추가 또는 변경 사항이 적용되었습니다.
치명적인 오류 메시지. 진단 메시지의 전체 목록은 perldiag를 참조하십시오.
신제품 진단
신제품 오류
· 묶인 @DB::args를 설정할 수 없습니다.
이 오류는 "호출자"가 @DB::args를 설정하려고 시도했지만 연결되어 있음을 발견했을 때 발생합니다. 이 전에
오류가 추가되어 대신 충돌이 발생했습니다.
· 수정 불가능한 배열을 연결할 수 없습니다.
이 오류는 "결속" 연산자가 결속하기 전에 수행하는 안전 점검의 일부입니다.
@_와 같은 특수 배열. 이 메시지가 표시되면 안 됩니다.
· &CORE::%s은(는) 직접 호출할 수 없습니다.
이는 "CORE::" 네임스페이스의 서브루틴이 &foo 구문을 사용하여 호출될 때 발생합니다.
참조를 통해. 이 패키지의 일부 서브루틴은 아직 그런 방식으로 호출할 수 없습니다.
그러나 베어워드로 호출되어야 합니다. 위의 ""CORE" 네임스페이스의 서브루틴"을 참조하세요.
· 소스 필터는 바이트 스트림에만 적용됩니다.
이 새로운 오류는 소스 필터를 활성화하려고 할 때 발생합니다(보통
소스 필터 모듈) "unicode_eval" 아래의 "eval"에 전달된 문자열 내
기능.
신제품 경고
· 정의된(@array)는 더 이상 사용되지 않습니다.
오랫동안 사용되지 않는 "definition(@array)"는 이제 패키지 변수에 대해서도 경고합니다.
이전에는 어휘 변수에 대해서만 경고를 표시했습니다.
· 길이() %s에서 사용됨
이 새로운 경고는 "길이"가 배열이나 해시에 사용될 때 발생합니다.
"스칼라(@array)" 또는 "스칼라(키 %hash)".
· lvalue 속성 %s은(는) 이미 정의된 서브루틴입니다.
:lvalue 속성이 Perl에 적용될 때 attribute.pm은 이제 이 경고를 내보냅니다.
이미 정의된 서브루틴을 사용하면 예상치 못한 측면이 발생할 수 있습니다.
효과.
· 과부하 인수 '%s'이(가) 잘못되었습니다.
"과부하" 범주에서 이 경고는 과부하 pragma가 다음과 같을 때 생성됩니다.
인식할 수 없는 인수가 주어지면 아마도 연산자를 잘못 입력했을 것입니다.
· $[ %s에서 사용됨 ($]를 의미했나요?)
이 새로운 경고는 버전 확인에서 $[의 잘못된 사용을 포착하기 위해 존재합니다. $], 아님
$[, 버전 번호가 포함되어 있습니다.
· 쓸데없는 임시직 배정
lvalue 서브루틴에서 반환된 임시 스칼라에 할당하면 이제 다음이 생성됩니다.
경고 [perl #31946].
· \E의 쓸모없는 사용
"\E"는 "\Q", "\L" 또는 "\U"가 앞에 오지 않으면 아무 작업도 수행하지 않습니다.
제거됨 오류
· "정렬은 이제 예약어입니다"
이 오류는 인수 없이 "sort"를 호출한 다음 ";"을 호출할 때 발생했습니다. 또는
")". (예: "sort;"는 죽지만 "{sort}"는 괜찮습니다.) 이 오류 메시지는 다음에 추가되었습니다.
Perl 3은 더 이상 작동하지 않는 "close(sort)"와 같은 코드를 포착합니다. XNUMX개 이상
수십 년이 지난 지금 이 메시지는 더 이상 적절하지 않습니다. 이제 인수 없이 "정렬"하는 것은
항상 허용되며 빈 목록을 반환합니다.
이미 허용되었습니다 [perl #90030].
변경 에 현존하는 진단
· 배열이나 해시가 다음과 같을 때 생성되는 "패턴 일치 적용 중..." 또는 이와 유사한 경고
이제 "=~" 연산자의 왼쪽에 변수 이름이 언급됩니다.
· "존재하지 않는 공유 문자열을 해제하려는 시도"의 철자는 "non-
존재함"이 "존재하지 않음"으로 수정되었습니다. 이미 올바른 철자로 나열되어 있습니다.
펄디아그에서.
· 토픽라이저 외부에서 "기본값" 및 "언제"를 사용하는 데 대한 오류 메시지가 수정되었습니다.
"계속" 및 루프 제어에 대한 메시지와 일치하도록 표준화되었습니다. 그들은 이제 책을 읽습니다
'국화화 장치 외부에서는 "기본값"을 설정할 수 없습니다' 및 '국화화 장치 외부에서는 "언제"할 수 없습니다'.
둘 다 '사용할 수 없습니다'였습니다. 언제() 토픽라이저 외부' [perl #91514].
· "코드 포인트 0x%X는 유니코드가 아니며 일치하는 속성이 없습니다. 모두 역순입니다.
속성은"이 "코드 포인트 0x%X는 유니코드가 아니며 모든 \p{}와 일치합니다"로 변경되었습니다.
실패하다; 모든 \P{} 일치가 성공합니다."
· 이전에는 필수였던 상수 서브루틴에 대한 재정의 경고가 발생했습니다.
"경고 없음" 아래에 있습니다. 이제 그들은 경고 pragma를 존중합니다.
· "glob failed" 경고 메시지는 이제 "경고 없음"을 통해 표시되지 않습니다. [perl
#111656].
· 잘못된 버전 형식 오류 메시지가 이제 "음수 버전 번호"로 표시됩니다.
음수의 경우 "숫자가 아닌 데이터" 대신 괄호를 사용합니다.
· 두 가지 경고에 의견을 넣으려는 시도가 가능합니다. qw() 목록과 가능한 시도
쉼표로 구분된 단어는 더 이상 상호 배타적이지 않습니다. 동일한 "qw" 구문
둘 다 생산할 수 있습니다.
· $_가 암시적이고 정의되지 않은 경우 "y///r"에 대한 초기화되지 않은 경고는 이제 다음을 언급합니다.
연산자의 비/r 변형과 마찬가지로 변수 이름입니다.
· '괄호 없이 "foo"를 사용하면 모호합니다.' 경고가 적용되도록 확장되었습니다.
내장된 것뿐만 아니라 (;$) 프로토타입이 있는 사용자 정의 서브루틴에도 적용됩니다.
기능.
· 유니코드 문자가 포함된 어휘("my") 변수의 이름을 언급하는 경고
이제 출력 핸들에 있는 ":utf8" 레이어의 존재 여부를 고려합니다.
상관없이 UTF8을 출력하는 대신. 또한 올바른 이름이
원시 UTF8 바이트가 아닌 $SIG{__WARN__} 처리기에 전달된 문자열입니다.
유틸리티 변경
h2ph
· 다음 형식의 코드를 생성하는 데 사용되는 h2ph
않는 한(정의된(&FOO)) {
하위 FOO() {42;}
}
그러나 서브루틴은 컴파일 타임 선언이므로 다음의 영향을 받지 않습니다.
상태. 이제 서브루틴 주위에 문자열 "eval"을 내보내도록 수정되었습니다.
[펄 #99368].
비늘
· 비늘 더 이상 첫 번째 줄 번호가 반복되는 역추적을 내보내지 않습니다.
이:
사용자 코드에서 포착되지 않은 예외:
-e 라인 1에서는 fwuddle을 조작할 수 없습니다.
-e 라인 1에서
main::baz() -e 라인 1에서 호출됨
main::bar() -e 라인 1에서 호출됨
main::foo() -e 라인 1에서 호출됨
이 되었습니다:
사용자 코드에서 포착되지 않은 예외:
-e 라인 1에서는 fwuddle을 조작할 수 없습니다.
main::baz() -e 라인 1에서 호출됨
main::bar() -e 라인 1에서 호출됨
main::foo() -e 라인 1에서 호출됨
· 일부 오류 메시지는 별도의 항목으로 나열되는 여러 줄로 구성됩니다.
perldiag. splain은 이러한 경우에 별도의 항목을 찾도록 학습되었습니다.
단순히 메시지를 찾지 못한 것뿐입니다.
우편번호 세부정보
· 이것은 IO::Compress::Base 업그레이드의 일부로 포함된 새로운 유틸리티입니다.
zipdetails는 zip 파일의 내부 레코드 구조에 대한 정보를 표시합니다.
여기에 저장된 압축 데이터의 세부 정보를 표시하는 것과는 관련이 없습니다.
zip 파일.
구성 그리고 편집
· 정규식.h GCC와의 호환성을 위해 수정되었습니다. -워러 옵션, 다음에서 사용됨
Perl의 헤더 파일(5.14.1)을 포함하는 일부 프로젝트.
· "USE_LOCALE{,_COLLATE,_CTYPE,_NUMERIC}"이 perl -V의 출력에 추가되었습니다.
(비록 작은 영역일지라도) 인터프리터 바이너리의 동작에 영향을 미칩니다.
· IPC::Open2에 대한 코드와 테스트가 다음에서 이동되었습니다. 내선/IPC-Open2 으로
내선/IPC-Open3, "IPC::Open2::open2()"는 얇은 래퍼로 구현되므로
"IPC::Open3::_open3()"이므로 매우 밀접하게 연결되어 있습니다.
· 이제 매직 유형과 매직 vtable이 새 스크립트의 데이터에서 생성됩니다.
regen/mg_vtable.pl, 손으로 유지 관리하는 대신. 다른 EBCDIC 변형
'~'에 대한 코드 포인트에 동의할 수 없습니다. 문자에서 코드 포인트로의 변환이 완료되었습니다.
빌드 시간에 generate_uudmap 새로 생성된 헤더로 mg_data.h. "PL_vtbl_bm"
및 "PL_vtbl_fm"은 이제 전처리기에 의해 대신 "PL_vtbl_regexp"로 정의됩니다.
별개의 C 변수입니다. "PL_vtbl_sig"가 제거되었습니다.
· "-DPERL_GLOBAL_STRUCT"를 사용한 빌드가 다시 작동합니다. 이 구성은 일반적으로
익숙한.
· Perl은 다음과 같이 구성되었습니다. MAD 이제 OP가 해제될 때 "MADPROP" 구조가 올바르게 해제됩니다.
"MADPROP"은 이제 "PerlMemShared_malloc()"을 사용하여 할당됩니다.
· makedef.pl 리팩토링되었습니다. 이는 다음 항목에 눈에 띄는 영향을 미치지 않아야 합니다.
이를 빌드의 일부로 사용하는 플랫폼(AIX, VMS, Win32).
· "useperlio"는 더 이상 비활성화할 수 없습니다.
· 파일 global.sym 더 이상 필요하지 않아 제거되었습니다. 그 안에는 다음의 목록이 들어 있었습니다.
내보낸 모든 함수는 다음에 의해 생성된 파일 중 하나입니다. regen/embed.pl 데이터에서
embed.fnc 그리고 재생성/opcode. 유일한 사용자가 되도록 코드가 리팩터링되었습니다.
global.sym, makedef.pl, 지금 읽습니다 embed.fnc 그리고 재생성/opcode 직접 제거
내보낸 함수 목록을 중간 파일에 저장해야 합니다.
As global.sym 설치된 적이 없습니다. 이 변경 사항은 빌드 외부에 표시되어서는 안 됩니다.
프로세스.
· 포드/빌드톡Perltoc을 빌드하기 위해 빌드 프로세스에서 사용되는 가 리팩토링되었으며
쉽게 한. 이제 Perltoc을 빌드하는 코드만 포함되어 있습니다. 다시 생성할 코드
Makefile이 다음으로 이동되었습니다. 포팅/pod_rules.pl. 이 변경 사항이 있으면 버그입니다.
빌드 프로세스에 대한 중요한 영향.
· 포드/로피톨 지금은 다음에 의해 만들어졌습니다. 포드/빌드톡, 함께 배송되는 대신
분포. 이제 맨페이지 목록이 생성되었습니다(따라서 현재 상태). 보다
해결되지 않은 관련 문제에 대해서는 RT #103202도 있습니다.
· "XS::Typemap"에 대한 매뉴얼 페이지는 더 이상 설치되지 않습니다. "XS::Typemap"은 테스트 모듈입니다.
설치되지 않았으므로 문서를 설치하는 것은 의미가 없습니다.
· -Dusesitecustomize 및 -Duserelocatableinc 옵션이 이제 제대로 함께 작동합니다.
플랫폼 고객 지원
플랫폼별 노트
Cygwin에서
· 버전 1.7부터 Cygwin은 기본 UTF-8 경로를 지원합니다. Perl이 그 아래에 구축되어 있다면
환경, 디렉터리 및 파일 이름은 UTF-8로 인코딩됩니다.
· Cygwin은 모든 원래 Win32 환경 변수를 초기화하지 않습니다. 보다
읽어보기.cygwin 새로 추가된 "Cygwin::sync_winenv()" 함수에 대한 논의
[perl #110190] 및 추가 링크.
HP-UX
· HP-UX PA-RISC/64는 이제 gcc-4.x를 지원합니다.
이제 소켓 크기를 수정하는 수정 사항으로 인해 테스트 제품군이 HP-UX PA-RISC에 대해 통과하게 되었습니다.
64bitall 빌드. (5.14.2)
VMS
· 불필요한 포함을 제거하고 기타 컴파일러 경고를 수정하고 일부를 닫습니다.
에 대한 비공개 댓글 vms/vms.c.
· VMS 빌드에서 sockadapt 레이어를 제거합니다.
· v7.0 이전의 VMS 버전과 v6.0 이전의 DEC C 버전에 대한 명시적 지원이 추가되었습니다.
제거되었습니다.
· Perl 5.10.1부터 자체 개발한 "stat" 래퍼는 구별할 수 없습니다.
밑줄이 포함된 디렉토리 이름과 그렇지 않으면 동일한 파일 이름 사이
같은 위치에 점이 포함되어 있습니다(예: t/test_pl은 디렉토리이고 t/test.pl은 디렉토리입니다).
파일). 이 문제는 수정되었습니다.
· VMS 빌드에서는 이제 Perl에 대한 C 코드의 결과 기호 이름을 더 길게 허용합니다.
31자 이상. 다음과 같은 기호
"Perl__it_was_the_best_of_times_it_was_the_worst_of_times"를 이제 자유롭게 생성할 수 있습니다.
VMS 링커가 정지되지 않도록 합니다.
GNU / 허드
· GNU/Hurd의 수많은 빌드 및 테스트 실패가 다음에 대한 힌트로 해결되었습니다.
DBM 모듈 구축, 라이브러리 검색 경로 감지, 대용량 파일 활성화
지원합니다.
오픈보스
· Perl은 이제 최소 지원 버전인 OpenVOS에서 동적 연결을 사용하여 구축되었습니다.
현재 릴리스 17.1.0입니다.
SunOS의
이제 CC 워크샵 C++ 컴파일러가 cc 없이 제공되는 시스템에서 감지되고 사용됩니다.
내부의 변경
· 컴파일된 형식 표현은 이제 "mg_ptr"을 통해 저장됩니다.
"PERL_MAGIC_fm". 이전에는 "SvLEN()" 이후 문자열 버퍼에 저장되었습니다.
문자열의 일반적인 끝. 이제 "SvCOMPILED()" 및 "SvCOMPILED_{on,off}()"가 존재합니다.
XS 코드와의 호환성만을 위해서입니다. 첫 번째는 항상 0이고 나머지 두 개는 이제 아니오입니다.
op. (5.14.1)
· 일부 전역 변수는 "const"로 표시되어 있으며 인터프리터 구조의 멤버입니다.
재정렬되었으며 opcode도 재정렬되었습니다. "OP_AELEMFAST" 작업에는
"OP_AELEMFAST"와 "OP_AELEMFAST_LEX"로 분할되었습니다.
· 해당 요소의 해시를 비울 때(예: undef(%h) 또는 %h=()를 통해) HvARRAY 필드는 다음과 같습니다.
더 이상 일시적으로 제로화되지 않습니다. 해제된 요소에 대해 호출된 모든 소멸자는
남은 요소. 따라서 %h=()는 "%h 키에 대해 $h{$_} 삭제"와 비슷해집니다.
· Boyer-Moore 컴파일된 스칼라는 이제 PVMG이며 Boyer-Moore 테이블은 이제 저장됩니다.
"PERL_MAGIC_bm"의 mg_ptr을 통해. 이전에는 테이블이 있는 PVGV였습니다.
"SvLEN()"을 넘어 문자열 버퍼에 저장됩니다. 이것은 마지막 장소를 제거합니다.
코어는 "SvLEN()" 이상의 데이터를 저장합니다.
· "Perl_sv_magic()"의 단순화된 논리는 오류에 대한 작은 동작 변경을 도입합니다.
알려지지 않은 마법 유형과 관련된 사례. 이전에는 "Perl_sv_magic()"이 전달된 경우
자신이 모르는 마법 종류라면 그럴 것이다.
1. 읽기 전용인 경우 "읽기 전용 값 수정 시도"를 Croak합니다.
2. SV에 이미 이 마법이 있는 경우 오류 없이 반환합니다.
3. 그렇지 않으면 "\\%o 유형의 마법을 처리하는 방법을 모르겠습니다"라고 짖습니다.
이제 읽기 중에도 항상 "\\%o 유형의 마법을 처리하는 방법을 모르겠습니다"라는 소리가 들릴 것입니다.
값만, 또는 이미 알 수 없는 마법 유형이 있는 SV만 해당됩니다.
· 실험적인 "fetch_cop_label" 함수의 이름이 "cop_fetch_label"로 변경되었습니다.
· "cop_store_label" 함수가 API에 추가되었지만 실험적입니다.
· embedvar.h 단순화되었으며 PL_* 변수에 대한 한 수준의 매크로 간접 참조
기본(비복수성) 구성에 대해 제거되었습니다. PERLVAR*() 매크로
이제 인수를 확장하는 대신 "PL_defgv"와 같은 토큰으로 직접 확장합니다.
"PL_Idefgv"로, embedvar.h "PL_Idefgv"를 "PL_defgv"에 매핑하는 매크로를 정의합니다. XS
구현에 있어 부당한 오류가 있는 코드는 업데이트가 필요할 수 있습니다.
· XSUB 기호를 내보낼지 여부를 명시적으로 선택할 수 있는 API가 추가되었습니다. 더
자세한 내용은 커밋 e64345f8에 대한 설명에서 확인할 수 있습니다.
· "is_gv_magical_sv" 기능이 제거되고 다음과 병합되었습니다.
"gv_fetchpvn_flags". GV가 있어야 하는지 여부를 결정하기 위해 호출되었습니다.
rvalue 컨텍스트에서 자동 활성화됩니다. 이제 새로운 "GV_ADDMG" 플래그로 대체되었습니다.
(API의 일부가 아님)
· 입력이 다음과 같을 때 "utf8n_to_uvuni()" 함수에서 반환된 코드 포인트
잘못된 UTF-8, 잘못된 형식이 허용되고 "utf8" 경고가 꺼졌습니다.
기형이 잘 정의되지 않은 경우에는 유니코드 대체 문자
코드 포인트를 계산할 수 있습니다. 이전에는 반환된 값이 본질적으로 쓰레기였습니다.
값이 잘 정의된 유일한 기형은 길이가 0인 문자열(XNUMX은
반환) 및 지나치게 긴 UTF-8 시퀀스입니다.
· 패드 목록은 이제 "AvREAL"로 표시됩니다. 즉, 참조 카운트됩니다. 그들은 항상 그랬어요
참조 카운트되었지만 실제로 표시되지 않았습니다. pad.c 자체적으로 청소를 했고,
일반적인 정리 코드를 사용하는 대신 sv.c. 스레드에서 문제가 발생했습니다.
이제 "AvREAL" 플래그가 켜져 있지만 복제에서는 꺼져 있습니다. pad.c 바로 전에
padlist가 해제되었습니다(이후 pad.c 패드의 사용자 정의 해제를 수행했습니다).
· Perl 코어를 구성하는 모든 C 파일이 UTF-8로 변환되었습니다.
· 유니코드 기호 작업의 일부로 다음과 같은 새로운 기능이 추가되었습니다.
흐브나멜렌
HvNAMEUTF8
흐베나멜렌
HvENAMEUTF8
gv_init_pv
gv_init_pvn
gv_init_pvsv
gv_fetchmeth_pv
gv_fetchmeth_pvn
gv_fetchmeth_sv
gv_fetchmeth_pv_autoload
gv_fetchmeth_pvn_autoload
gv_fetchmeth_sv_autoload
gv_fetchmethod_pv_flags
gv_fetchmethod_pvn_flags
gv_fetchmethod_sv_flags
gv_autoload_pv
gv_autoload_pvn
gv_autoload_sv
newGVgen_flags
sv_derived_from_pv
sv_derived_from_pvn
sv_derived_from_sv
sv_does_pv
sv_does_pvn
sv_does_sv
whichsig_pv
whichsig_pvn
whichsig_sv
새로운CONSTSUB_flags
gv_fetchmethod_flags와 같은 gv_fetchmethod_*_flags 함수는 실험적이며
향후 릴리스에서는 변경될 수 있습니다.
· 다음 기능이 추가되었습니다. 이것들은 지원 API의 일부:
GvNAMEUTF8
Gv에나멜렌
GvENAME_HEK
경찰STASH_flags
경찰STASH_flags_set
PmopSTASH_플래그
PmopSTASH_flags_set
sv_sethek
헤크파르그
HEK를 보간하기 위한 "SVf"에 해당하는 "HEKf" 매크로도 있습니다.
형식화된 문자열.
· "sv_catpvn_flags"는 몇 가지 새로운 내부 전용 플래그인 "SV_CATBYTES"와
"SV_CATUTF8"은 연결될 char 배열이 UTF8인지 여부를 알려줍니다. 이것
전달할 임시 SV를 생성하는 것보다 더 효율적인 연결을 허용합니다.
"sv_catsv".
· XS AUTOLOAD 서브의 경우 5.6.0에서와 마찬가지로 $AUTOLOAD가 한 번 더 설정됩니다. 이것은
5.8~5.14와의 호환성을 위해 "SvPVX(cv)" 설정 외에도 "자동 로딩"을 참조하세요.
Perlguts에서 "XSUB 사용"을 사용합니다.
· Perl은 이제 MRO 플러그인에서 반환된 배열(선형화된 isa)이 시작되는지 여부를 확인합니다.
대신에 배열이 생성된 클래스 자체의 이름으로
그럴 것이라고 가정합니다. 이렇게 하면 첫 번째 요소가 건너뛰는 것을 방지할 수 있습니다.
메소드 조회. 이는 또한 "mro::get_linear_isa"가 하나의 배열을 반환할 수 있음을 의미합니다.
제공된 MRO 플러그인 [perl #94306]보다 더 많은 요소입니다.
· "PL_curstash"는 이제 참조 카운트됩니다.
· 이제 "PL_hints"($^H)에 버전 선언에 사용되는 기능 번들 힌트가 있습니다.
로드하지 않으려면 feature.pm. 힌트 비트의 한 설정은 "사용자 정의"를 나타냅니다.
기능 번들입니다. 이는 "%^H"의 항목이 계속 적용됨을 의미합니다. feature.pm 사용
그.
"HINT_FEATURE_MASK" 매크로는 다음에 정의되어 있습니다. 펄.h 다른 힌트와 함께. 다른
기능과 번들을 설정하고 테스트하기 위한 매크로는 새로운 버전에 있습니다. 기능.h.
"FEATURE_IS_ENABLED"(다음으로 이동됨) 기능.h)는 더 이상 전체에서 사용되지 않습니다.
코드베이스이지만 더 구체적인 매크로(예: "FEATURE_SAY_IS_ENABLED")가 정의되어 있습니다.
in 기능.h.
· lib/feature.pm 이제 새 파일에 의해 생성된 생성된 파일입니다. regen/feature.pl 스크립트,
이는 또한 생성 기능.h.
· 연결된 배열은 이제 항상 "AvREAL"입니다. @_ 또는 "DB::args"가 묶인 경우 구체화됩니다.
첫째, 이것이 항상 사실인지 확인하십시오.
· 두 개의 새로운 함수 "utf8_to_uvchr_buf()" 및 "utf8_to_uvuni_buf()"가 추가되었습니다.
이는 "utf8_to_uvchr" 및 "utf8_to_uvuni"(현재는 더 이상 사용되지 않음)와 동일합니다.
그러나 끝을 넘어서 읽는 것을 방지하는 데 사용되는 추가 매개변수를 사용합니다.
입력 문자열. perlapi의 "utf8_to_uvchr_buf" 및 "utf8_to_uvuni_buf"를 참조하십시오.
펄라피.
· 정규식 엔진은 이제 유니코드에서 TRIE 대소문자를 구분하지 않는 일치를 수행합니다.
이렇게 하면 "use re 'debug';"의 출력이 변경될 수 있으며 다양한 작업 속도가 빨라집니다.
· 스레드로부터 안전한 대안을 제공하는 새로운 "wrap_op_checker()" 함수가 있습니다.
"PL_check"에 직접 쓰기.
선택된 곤충 수정
배열 그리고 해시
· 다음과 같은 경우 "반복 시 해제된 값 사용" 오류가 발생하는 버그가 수정되었습니다.
반복될 다음 두 개의 해시 요소가 삭제됩니다[perl #85026]. (5.14.1)
· 현재 해시 반복자(해시 반복자에 의해 반환될 해시 요소) 삭제
void 컨텍스트에서 "each"에 대한 다음 호출)을 해제하는 데 사용되지 않았습니다[perl #85026].
· 메소드 캐시를 업데이트하는 데 사용되는 "delete $Class::{method}" 구문을 통한 메소드 삭제
void 컨텍스트에서 호출되지만 스칼라 또는 목록 컨텍스트에서는 호출되지 않는 경우.
· 무효 컨텍스트에서 해시 요소가 삭제되면 이제 내부 해시 항목이 해제됩니다.
값이 해제되기 전에 해당 값이 호출한 소멸자가 해제되는 것을 방지하기 위해
일관되지 않은 상태의 해시를 확인합니다. 다음과 같은 경우 이중 해제가 발생할 수 있습니다.
소멸자는 해시 자체를 해제했습니다[perl #100340].
· 빈 해시에서 속도를 높이기 위한 Perl 5.12.0의 "키" 최적화로 인해 "각"이 발생했습니다.
마지막 요소가 삭제된 후 호출되면 반복자를 재설정하지 않습니다.
· 깊게 중첩된 해시를 해제해도 더 이상 충돌이 발생하지 않습니다[perl #44225].
· XS 코드에서 값이 없는 요소로 해시를 생성하는 것이 가능합니다. 그만큼
lvalue 컨텍스트에서 이를 처리할 때 충돌이 발생하는 데 사용되는 해시 요소 및 슬라이스 연산자입니다.
이제 "생성할 수 없는 해시 값 수정 시도" 오류 메시지가 표시됩니다.
· 해시 또는 배열에 대한 목록 할당이 해시 또는 배열을 해제한 소멸자를 트리거하는 경우
배열 자체가 충돌을 일으킬 수 있습니다. 이것은 더 이상 사실이 아닙니다 [perl #107440].
· 지역화된 배열이나 해시의 typeglob을 해제하는 것이 가능했습니다(예: "local
@{"엑스"}; $::{x}")를 삭제하면 범위 종료 시 충돌이 발생합니다.
· Hash::Util에 영향을 미치는 일부 핵심 버그가 수정되었습니다.
glob 복사로 인해 더 이상 다음 할당으로 인해 glob이 손상되지 않습니다(5.14.2).
쓰기 시 복사 스칼라를 보유하는 해시 요소를 잠금 해제해도 더 이상 문제가 발생하지 않습니다.
동일한 문자열을 공유하는 다른 스칼라를 수정하기 위해 해당 스칼라 수정
버퍼.
C API 고정 된
· "newHVhv" XS 함수는 이제 충돌이나 반환 대신 연결된 해시에서 작동합니다.
빈 해시.
· "SvIsCOW" C 매크로는 이제 다음과 같은 typeglobs의 읽기 전용 복사본에 대해 false를 반환합니다.
다음에 의해 생성된 것:
$hash{elem} = *foo;
Hash::Util::lock_value %hash, 'elem';
예전에는 true를 반환했습니다.
· "SvPVutf8" C 함수는 더 이상 인수를 수정하려고 시도하지 않아 오류가 발생합니다.
[펄 #108994].
· "SvPVutf8"은 이제 마법 변수와 함께 제대로 작동합니다.
· "SvPVbyte"는 이제 PV가 아닌 곳에서도 제대로 작동합니다.
· 잘못된 UTF-8 입력이 표시되면 XS 호출 가능 기능이
"is_utf8_string()", "is_utf8_string_loc()" 및 "is_utf8_string_loclen()"은 읽을 수 있습니다.
입력 문자열의 끝을 최대 12바이트까지 넘습니다. 이런 일은 더 이상 발생하지 않습니다. [펄
#32080]. 그러나 현재 "is_utf8_char()"에는 여전히 이 결함이 있습니다.
"is_utf8_char()" 위에.
· C 수준의 "pregcomp" 함수는 패턴이 다음과 같은지에 대해 혼동될 수 있습니다.
패턴이 오버로드되었거나 연결되었거나 기타 마법의 스칼라인 경우 UTF8 [perl
#101940].
컴파일 타임 힌트
· "%^H"를 연결하면 더 이상 Perl이 충돌하거나 "%^H"의 내용을 무시하지 않습니다.
컴파일 범위를 입력합니다 [perl #106282].
· "eval $string" 및 "require"는 컴파일 중에 "%^H"를 현지화하지 않는 데 사용되었습니다.
"eval" 호출 자체가 컴파일될 당시에는 비어 있습니다. 이것은 무서운 측면으로 이어질 수 있습니다
주변 코드가 시도한 다른 플래그를 활성화하는 "use re "/m""과 같은 효과
호출자에 대해 활성화합니다 [perl #68750].
· "eval $string" 및 "require"는 더 이상 런타임에 힌트($^H 및 "%^H")를 현지화하지 않습니다.
$string 또는 필수 파일을 컴파일하는 동안에만 가능합니다. 이렇게 하면 "BEGIN {
$^H{foo}=7 }"는 "BEGIN { eval '$^H{foo}=7' }" [perl #70151]과 동일합니다.
· XS 코드("newXS" 또는 "newATTRSUB"를 통해)에서 BEGIN 블록을 생성하면
완료하려면 현재 컴파일 코드의 힌트를 현재 힌트로 만듭니다. 이것
경고가 발생하지 않는 범위에서 경고가 발생할 수 있습니다.
기록 중 복사 스칼라
쓰기 중 복사 또는 공유 해시 키 스칼라는 5.8.0에서 도입되었지만 대부분의 Perl 코드는 도입되었습니다.
발생하지 않습니다(주로 내부적으로 사용됨). Perl 5.10.0은 이를 확장했습니다.
스칼라에 "__PACKAGE__" 또는 해시 키를 할당하면 기록 중 복사가 가능해집니다.
Perl의 여러 부분은 이를 설명하기 위해 업데이트되지 않았지만 이제는 수정되었습니다.
· "utf8::decode"에는 쓰기 시 복사 스칼라의 문자열 버퍼를 수정하는 불쾌한 버그가 있었습니다.
제자리에 있습니다(즉, 복사본 건너뛰기). 이로 인해 해시에 두 가지 요소가 포함될 수 있습니다.
동일한 키 [perl #91834]를 사용합니다. (5.14.2)
· Lvalue 서브루틴은 COW 스칼라 반환을 허용하지 않았습니다. 이 문제는 해결되었습니다.
Perl 5.12.3 및 5.14.0의 lvalue 스칼라 컨텍스트. 그러나 목록 컨텍스트는 Perl XNUMX 및 XNUMX까지 수정되지 않았습니다.
이번 릴리스.
· 쓰기 시 복사 값을 포함하는 제한된 해시 요소(pragma 필드 참조)
삭제할 수 없으며 해당 해시를 지울 수도 없습니다("%hash = ()"). (5.14.2)
· 쓰기 중 복사가 포함된 경우 읽기 전용으로 만드는 데 사용되는 연결 변수 지역화
끈. (5.14.2)
· 숨김 요소에 쓰기 시 복사 문자열을 할당해도 더 이상 이중 해제가 발생하지 않습니다.
이러한 변경에도 불구하고 이러한 할당의 결과는 여전히 정의되지 않았습니다.
· 연결된 변수에 쓰기 중 복사 문자열을 할당해도 더 이상 해당 변수가 중단되지 않습니다.
내부적으로 PVMG 또는 PVLV인 경우 연결됩니다.
· 다음을 유발하는 데 사용되는 쓰기 중 복사 스칼라를 반환하는 연결된 변수에 대체를 수행합니다.
어설션 실패 또는 "존재하지 않는 공유 문자열을 해제하려는 시도" 경고.
· 이것은 5.12에서 회귀한 것입니다. 5.14.0에서는 비트 할당 연산자 "|=",
"^=" 및 "&="는 왼쪽이 정의되지 않은 상태로 남아 있기 시작했습니다.
쓰기 중 복사 문자열 [perl #108480].
· Storable, Devel::Peek 및 PerlIO::scalar에는 비슷한 문제가 있었습니다. "업데이트된 모듈"을 참조하십시오.
및 Pragmata", 위.
The 디버거
· dumpvar.pl, 따라서 디버거의 "x" 명령은 다음을 처리하도록 수정되었습니다.
이름에 "="가 포함된 클래스로 축복된 개체입니다. 그러한 객체의 내용
덤프되지 않았습니다 [perl #101814].
· 디버거 세션을 다시 시작하는 "R" 명령이 Windows에서 작동하도록 수정되었습니다.
또는 "POSIX::_SC_OPEN_MAX" 상수가 없는 다른 시스템 [perl #87740].
· "#line 42 foo" 지시문은 다음에서 사용하는 행 배열을 업데이트하지 않는 데 사용됩니다.
문자열 평가에서 발생한 경우 디버거. 이는 5.14에서 부분적으로 수정되었지만
각 평가에서 단일 "#line 42 foo"에 대해서만 작동했습니다. 이제는 여러 용도로 작동합니다.
· 디버거가 서브루틴 호출을 가로채면 서브루틴 이름이나
이에 대한 참조는 디버거가 액세스할 수 있도록 $DB::sub에 저장됩니다. 때로는 (예를 들어
"$foo = *bar; undef *bar; &$foo") $DB::sub는 변경할 수 없는 이름으로 설정됩니다.
서브루틴을 찾는 데 사용되므로 디버거의 서브루틴 호출 시도가 실패합니다. 지금
참조가 필요한지 확인하는 것이 더 강력하므로 이러한 문제는
더 이상 이런 일이 일어나서는 안 됩니다 [rt.cpan.org #69862].
· 모든 서브루틴에는 디버거가 사용하는 연관된 파일 이름이 있습니다. 하나
아래에 복제될 때 잘못 할당되는 상수 서브루틴과 관련됨
스레드. 결과적으로 스레드 애플리케이션을 디버깅하면 메모리가 부족해질 수 있습니다.
손상 [perl #96126].
역참조 운영자
· "define(${"..."})", "defined(*{"..."})" 등은 대부분의 경우 true를 반환하는 데 사용되지만 그렇지 않습니다.
모든 내장 변수(아직 사용되지 않은 경우) 이 버그는 영향을 받았습니다
"${^GLOBAL_PHASE}" 및 "${^UTF8CACHE}" 등이 있습니다. 또한 다음과 같은 경우 false를 반환하는 데 사용되었습니다.
패키지 이름도 제공되었습니다("${"::!"}") [perl #97978, #97492].
· Perl 5.10.0에는 유사한 버그가 도입되었습니다: "define(*{"foo"})" 여기서 "foo"는
변수가 한 번도 존재하지 않은 경우 false를 반환하는 데 사용되는 내장 전역 변수의 이름
전에는 사용했지만 먼저 부르다. 이 문제도 해결되었습니다.
· 5.6.0부터 "*{ ... }"는 정의되지 않은 값을 처리하는 방식이 일관되지 않았습니다. 그것
대부분의 정의되지 않은 값에 대해 엄격 모드 또는 lvalue 컨텍스트에서는 종료되지만
특정 스칼라 반환에 대해 (경고와 함께) 빈 문자열로 처리됩니다.
"undef()"(내부적으로 &PL_sv_undef). 이 문제가 수정되었습니다. "undef()"는 이제
Perl 5.005에서처럼 정의되지 않은 다른 스칼라처럼 처리됩니다.
파일핸들, 마지막으로 액세스한
Perl에는 액세스할 마지막 파일 핸들을 저장하는 내부 변수가 있습니다. 사용된다
$로. 인수 없이 "tell" 및 "eof"를 사용합니다.
· 이전에는 이 내부 변수를 glob 복사로 설정한 후 수정하는 것이 가능했습니다.
해당 glob 복사본은 glob이 아닌 다른 것이며 여전히 마지막으로 액세스한
glob을 다시 할당한 후 변수와 연결된 파일 핸들:
내 $foo = *STDOUT; # $foo는 글로벌 복사본입니다.
<$foo>; # $foo는 이제 마지막으로 액세스된 핸들입니다.
$foo = 3; # 더 이상 글로브가 아니다
$foo = *STDERR; # 여전히 마지막으로 접근한 핸들
이제 "$foo = 3" 할당은 해당 내부 변수의 설정을 해제하므로 마지막-
"<$foo>"가 전혀 발생하지 않은 것처럼 파일 핸들에 액세스했습니다.
이는 또한 다음과 같은 경우 관련되지 않은 일부 핸들이 마지막으로 액세스된 핸들이 되는 것을 방지합니다.
$foo가 범위를 벗어나고 동일한 내부 SV가 다른 핸들에 사용됩니다. [perl
#97988].
· 5.14의 회귀로 인해 다음 명령문이 해당 내부 변수를 설정하지 않게 되었습니다.
내 $fh = *STDOUT;
$fh에게 말해주세요;
$fh의 eof;
$fh, 0,0을 찾습니다.
*$fh에게 말하세요;
eof *$fh;
*$fh, 0,0을 찾습니다;
readline *$fh;
이 문제는 현재 수정되었지만 "tell *{ *$fh }"에는 여전히 문제가 있으며 어떻게 해결되는지는 확실하지 않습니다.
이를 수정하려면 [perl #106536].
파일 테스트 그리고 "상태"
"filetests"라는 용어는 하이픈과 단일 문자로 구성된 연산자를 나타냅니다.
문자: "-r", "-x", "-M" 등. 파일 테스트에 적용될 때 "스택"이라는 용어는 다음을 의미합니다.
"-r -x -w $fooo"와 같이 동일한 피연산자를 공유하는 다른 파일 테스트 연산자가 뒤따릅니다.
· "stat"는 보다 일관된 경고를 생성합니다. 더 이상 "_"에 대해 경고하지 않습니다. [perl #71002]
더 이상 열지 않은 다른 핸들에 대한 경고를 건너뛰지 않습니다. 더 이상
운영 체제의 "fstat" 기능이 실패하면 열리지 않은 핸들에 대해 경고합니다.
· "stat"는 때때로 큰 inode 번호에 대해 음수를 반환합니다.
잘못된 내부 C 유형을 사용합니다. [펄 #84590]
· "lstat"는 파일 핸들이 주어지면 (경고와 함께) "stat"로 되돌아가는 것으로 문서화되어 있습니다.
IO 참조가 전달되면 실제로 "stat _"에 해당하는 작업을 수행하고
핸들을 무시합니다.
· 혼란스러운 "초기화되지 않은" 경고를 생성하는 데 사용되는 앞에 "stat"이 없는 "-T _"
눈에 보이는 초기화되지 않은 값이 없더라도 말입니다.
· "-T", "-B", "-l" 및 "-t"는 이제 다른 파일 테스트 연산자와 함께 스택할 때 작동합니다. [perl
#77388].
· 5.14.0에서는 파일 테스트 작업("-r", "-x" 등)이 연결된 인수에 대해 FETCH를 호출하기 시작했습니다.
베어워드로 호출된 경우 목록 연산자의 이전 인수에 속함
논쟁이 있거나 전혀 논쟁이 없습니다. 이 문제는 수정되었으므로 "push @foo, $tied, -r" no
$tied에서 더 이상 FETCH를 호출합니다.
· Perl 5.6에서는 "-l" 뒤에 베어워드 이외의 다른 것이 있으면 해당 인수를 처리합니다.
파일 이름으로. 5.8에서는 glob 참조("\*foo")에 대해 변경되었지만
glob 자체(*foo). "-l"이 없이 glob 참조에 대해 "undef"를 반환하기 시작했습니다.
"_" 핸들이 사용하는 마지막 통계 버퍼 설정(경고가 발생한 경우에만)
켜져 있습니다. 경고가 꺼진 상태에서는 5.6과 동일했습니다. 다시 말해 단순히 그랬다.
버그가 많고 일관성이 없습니다. 이제 5.6 동작이 복원되었습니다.
· "-l" 뒤에 맨어워드가 오면 더 이상 목록의 이전 인수를 "먹지" 않습니다.
인수 목록이 있는 연산자입니다. 따라서 "print "bar", -l foo"는 이제 실제로
"-l"이 더 오래 걸리기 때문에 "bar"를 인쇄합니다.
· Perl은 마지막 통계 버퍼를 추적하기 위해 여러 내부 변수를 유지합니다.
어떤 파일(핸들)이 생성되었는지, 어떤 유형인지, 마지막 통계가
성공했습니다.
동기화되지 않아 불일치가 발생하는 다양한 사례가 있었습니다.
또는 극단적인 경우의 불규칙한 동작("-T"에 대한 모든 언급은 "-B"에도 적용됨):
· "-T 핸들", "stat"을 수행하더라도 마지막 통계 유형을 재설정하지 않았습니다.
그래서 그 뒤에 오는 "lstat _"는 잘못된 결과를 즐겁게 반환할 것입니다. 또한 그것은
성공 상태를 설정하지 않습니다.
· "stat" 또는 파일 테스트에서 마지막으로 사용한 핸들을 해제하면 "-T _"가 발생할 수 있습니다.
관련 없는 핸들.
· IO 참조가 있는 "stat"는 통계 유형을 재설정하거나 파일 핸들을 기록하지 않습니다.
"-T _"를 사용합니다.
· 치명적인 경고로 인해 파일 테스트 연산자에 대해 통계 버퍼가 재설정되지 않을 수 있습니다.
열려 있지 않은 파일 핸들에 있거나 모든 핸들에 "-l"이 있습니다. 치명적인 경고도 중지됨 "-T"
$! 설정에서.
· 마지막 통계가 읽을 수 없는 파일에 있는 경우 "-T _"가 반환되어야 합니다.
"undef", 마지막 통계 버퍼를 변경하지 않고 그대로 둡니다. 하지만 그건 통계를 설정하고 있었어
입력하면 "lstat _" 작동이 중지됩니다.
· "-T 파일 이름" 읽을 수 없는 파일에 대한 내부 통계 버퍼를 재설정하지 않았습니다.
이 문제는 모두 해결되었습니다.
형식
· 형식 및 "formline"과 관련된 여러 가지 극단적인 경우가 수정되었습니다. 특히, 어디서
형식 자체는 잠재적으로 가변적입니다(예: 연결 및 오버로딩).
형식과 데이터의 인코딩이 다릅니다. 이 두 경우 모두에서,
출력이 손상될 수 있습니다 [perl #91032].
· "formline"은 더 이상 인수를 문자열로 변환하지 않습니다. 그래서 통과
"formline"에 대한 참조는 더 이상 참조 [perl #79532]를 파괴하지 않습니다.
· $^A(형식 출력 누산기)에 할당하면 이제 줄 수를 다시 계산합니다.
출력.
"주어진" 그리고 "언제"
· "given"은 암시적 $_의 범위를 적절하게 지정하지 않아 메모리 누수 또는
"변수를 사용할 수 없습니다" 경고 [perl #94682].
· "given"은 사용하는 암시적 어휘 $_에 대해 set-magic을 호출하지 않았습니다. 이것
예를 들어, "pos"는 동일한 작업을 한 번 실행하면 기억된다는 의미입니다.
입력이 다른 변수인 경우에도 다음 블록에 "주어진" 블록이 있습니다 [perl #84526].
· "when" 블록은 이제 둘러싸는 내부에 선언된 변수를 반환할 수 있습니다.
"주어진" 블록 [perl #93548].
The "글로브" 연산자
· VMS 이외의 OS에서 Perl의 "glob" 연산자(및 "<...>" 형식)는 File::Glob을 사용합니다.
아래에. File::Glob은 각 단어를 패턴에 공급하기 전에 패턴을 단어로 분할합니다.
"bsd_glob" 함수.
분할이 수행되는 방식에 몇 가지 불일치가 있었습니다. 이제 따옴표
(' 및 ")는 항상 쉘 스타일 단어 구분 기호로 처리됩니다(공백을 허용함).
단어의 일부) 및 백슬래시는 이스케이프를 위해 존재하지 않는 한 항상 보존됩니다.
인용 부호. 이전에는 상황에 따라 가끔 그런 일이 발생했습니다.
패턴에 공백이 포함되어 있습니다. 또한 패턴 끝에 공백이 이스케이프되었습니다.
더 이상 제거되지 않습니다 [perl #40470].
· "CORE::glob"은 이제 기본 globbing 함수를 호출하는 방법으로 작동합니다. 예전에는
"CORE::" 접두사에도 불구하고 존중이 재정의됩니다.
· miniperl(perl 자체가 빌드될 때 모듈을 구성하는 데 사용됨)에서 이제 "glob"이 사용됩니다.
csh를 호출하기 전에 %ENV를 지웁니다. csh가 그렇지 않은 경우 일부 시스템에서는 삐걱거리기 때문입니다.
LS_COLORS 환경 변수 [perl #98662]의 내용과 같습니다.
L값 서브 루틴
· 명시적 반환은 이제 복사하는 대신 return에 전달된 실제 인수를 반환합니다.
[펄 #72724, #72706]입니다.
· lvalue 구문을 적용하는 데 사용되는 Lvalue 서브루틴(즉, 왼쪽에 올 수 있는 모든 항목)
반환할 마지막 문과 인수에 대한 "=")의 쪽입니다. lvalue 이후
서브루틴이 항상 lvalue 컨텍스트에서 호출되는 것은 아니므로 이 제한이 해제되었습니다.
· Lvalue 서브루틴은 반환될 수 있는 값에 대해 덜 제한적입니다. 예전에는
"shift" 및 "delete" 및 기타 서브루틴에서 반환된 값에 대해 소리가 나지만 그렇지 않습니다.
더 이상 그렇게 합니다 [perl #71172].
· 목록 컨텍스트에서 @_를 반환하는 데 사용되는 빈 lvalue 서브루틴("sub :lvalue {}"). 모두
이를 위해 서브루틴이 사용되었지만 일반 서브루틴은 Perl 5.8.2에서 수정되었습니다. 이제 lvalue
서브루틴도 마찬가지로 수정되었습니다.
· 자동 활성화는 이제 다음과 같이 lvalue 서브루틴[perl #7946]에서 반환된 값에 대해 작동합니다.
lvalue 컨텍스트에서 "키"를 반환합니다.
· rvalue 컨텍스트에서 반환 값을 복사하는 데 사용되는 Lvalue 서브루틴. 뿐만 아니라
이는 CPU 사이클을 낭비하는 것이지만 버그도 발생시켰습니다. "($)" 프로토타입은
lvalue sub는 반환 값을 복사하고 [perl #51408], "while(lvalue_sub() =~ m/.../g)
{ ... }"는 끝없이 반복됩니다 [perl #78680].
· 잠재적인 lvalue 컨텍스트(예: 서브루틴 인수 또는 전달된 목록)에서 호출되는 경우
"for"로), lvalue 서브루틴은 반환된 읽기 전용 값을 복사하는 데 사용됩니다.
예를 들어, " sub :lvalue { $] } "는 $]를 반환하지 않고 그 복사본을 반환합니다.
· 잠재적인 lvalue 컨텍스트에서 호출될 때 lvalue 서브루틴은 배열 또는
배열이나 해시를 스칼라 변수에 바인딩하는 데 사용되는 해시로 인해 버그가 발생합니다. 이것
배열이 서브루틴에서 가장 먼저 반환되는 경우 이 문제는 5.14.0에서 수정되었습니다(그러나
"$scalar, @array" 또는 반환되는 해시에는 해당되지 않습니다. 이제 좀 더 일반적인 수정이 이루어졌습니다.
[perl #23790]을 적용했습니다.
· 인수가 모두 "my()" 또는 "our()"로 둘러싸인 메소드 호출(예:
"$object->method(my($a,$b))")는 서브루틴에서 lvalue 컨텍스트를 강제하는 데 사용됩니다. 이것
lvalue 메서드가 특정 값을 반환하는 것을 방지합니다.
· 컴파일 시 결정되지 않은 Lvalue 하위 호출(&$name 또는
&{"name"})은 마지막 문에서 발생하는 경우 더 이상 엄격한 참조에서 면제되지 않습니다.
lvalue 서브루틴 [perl #102486].
· 마지막에 발생한 경우 컴파일 시간에 하위가 표시되지 않는 하위 호출
lvalue 서브루틴의 명령문은 lvalue가 아닌 서브루틴을 거부하고 다음과 같이 종료됩니다.
"lvalue가 아닌 서브루틴 호출을 수정할 수 없습니다" [perl #102486].
하위가 있는 lvalue가 아닌 하위 호출 are 컴파일 타임에 보이는 것은 그 반대였습니다.
벌레. lvalue 서브루틴의 마지막 문에서 호출이 발생한 경우
lvalue 컨텍스트에서 lvalue sub가 호출될 때 오류가 없어야 합니다. Perl은 맹목적으로
lvalue가 아닌 서브루틴에서 반환된 임시 값에 할당합니다.
· 호출되는 실제 하위보다 우선순위를 갖는 데 사용되는 "AUTOLOAD" 루틴(예:
자동 로딩이 필요하지 않은 경우), lvalue 또는 잠재적인 lvalue 컨텍스트의 하위 호출의 경우,
서브루틴이 컴파일 타임에 표시되지 않은 경우.
· ":lvalue" 속성을 XSUB 또는 "sub"를 사용하여 별칭이 지정된 서브루틴 스텁에 적용
foo :lvalue;" 구문이 Perl 5.12에서 작동을 멈췄습니다. 이 문제가 수정되었습니다.
· 이미 정의된 서브루틴에 :lvalue 속성을 적용하면 작동하지 않습니다.
속성이 하위 컴파일 방식을 변경하므로 제대로 작동합니다. 따라서 Perl 5.12
이미 정의된 속성에 속성을 적용하려고 하면 경고가 시작됩니다.
보결. 이러한 경우 속성은 삭제됩니다.
그러나 5.12의 변경 사항에서는 사용자 정의 속성도 존재하는 경우가 누락되었습니다.
이 경우에는 여전히 자동으로 속성이 비효율적으로 적용됩니다. 그 누락은 이제
수정되었습니다. "sub foo :lvalue :Whatever"("foo"가 이미 정의된 경우) 이제 경고가 표시됩니다.
:lvalue 속성에 대해 설명하고 이를 적용하지 않습니다.
· 중첩된 lvalue 서브루틴 호출을 통한 lvalue 컨텍스트 전파에 영향을 미치는 버그가 있습니다.
수정되었습니다. 이전에는 중첩된 rvalue 컨텍스트에서 값을 반환하는 것이 처리되었습니다.
내부 서브루틴 호출에 의한 lvalue 컨텍스트로 일부 값(예:
읽기 전용 값)이 거부됩니다.
과부하
· 다음에 의존하는 오버로드된 개체와 관련된 산술 할당("$left += $right")
왼쪽 피연산자가 오버로드되지 않은 경우 'nomethod' 재정의가 더 이상 segfault를 발생시키지 않습니다.
· 오버로드 중에 메소드를 찾을 수 없을 때 발생하는 오류는 이제 다음을 언급합니다.
5.8.x에서와 같이 패키지 이름을 잘못 언급하는 대신
5.10.0부터 "과부하" 패키지가 사용되었습니다.
· %overload:: 정의를 해제해도 더 이상 충돌이 발생하지 않습니다.
프로토 타입 of 내장 키워드
· "prototype" 기능은 더 이상 "__FILE__", "__LINE__" 및 "__LINE__"에 대해 죽지 않습니다.
"__PACKAGE__" 지시어. 이제 빈 문자열 프로토타입을 반환합니다.
이는 "time"과 같은 nullary 함수와 구문상 구별이 불가능합니다.
· "prototype"은 이제 "eq"와 같이 재정의 가능한 모든 중위 연산자에 대해 "undef"를 반환합니다.
함수와 어떤 방식으로든 호출할 수 없습니다. 잘못된 결과를 반환하는 데 사용됨
누군가에게는 프로토타입이고 다른 누군가에게는 죽습니다 [perl #94984].
· 여러 내장 함수의 프로토타입 - "getprotobynumber", "lock", "not" 및
"선택"-수정되었거나 적어도 이전보다 현실에 더 가까워졌습니다.
정규병 표현
· "/[[:ascii:]]/" 및 "/[[:blank:]]/"는 이제 "로케일 사용"에서 로케일 규칙을 사용합니다.
플랫폼이 이를 지원합니다. 이전에는 플랫폼의 기본 문자 집합을 사용했습니다.
· "m/[[:ascii:]]/i" 및 "/\p{ASCII}/i"는 이제 동일하게 일치합니다.
장소). 이는 5.14에 도입된 회귀를 수정합니다. 여기서 첫 번째 표현식은
KELVIN SIGN과 같은 ASCII 외부 문자와 일치할 수 있습니다.
· "/.*/g"는 때때로 "\n"으로 끝나는 문자열의 끝에서 일치를 거부합니다.
이 문제는 수정되었습니다[perl #109206].
· 5.12.0부터 Perl은 내부 장부를 혼란스럽게 만들곤 했습니다.
"${ qr// }"를 해시 요소에 할당하고 Hash::Util을 사용하여 잠급니다. 이럴수있다
이중 해제, 충돌 또는 불규칙한 동작이 발생합니다.
· 새로운(5.14.0의) 정규식 수정자 "/a"는 "/aa"처럼 반복될 때 다음을 금지합니다.
해당 범위 내의 문자와 일치하는 ASCII 범위 외부의 문자
"/i"에서 일치합니다. 일부 상황에서는 작동하지 않았습니다.
다음과 같은 교대:
"\N{켈빈 기호}" =~ /k|foo/iaa;
부적절하게 성공했습니다. 이제 이 문제가 해결되었습니다.
· 5.14.0에서는 다음과 같은 정규식 문자 클래스에 일부 메모리 누수가 발생했습니다.
"[\w\s]"는 이제 수정되었습니다. (5.14.1)
· 정규식 일치의 극단적인 경우는 잠재적으로 반복될 수 있습니다. 이런 일이 일어났습니다
여러 개의 문자가 있는 대괄호 문자 클래스의 "/i" 아래에만
문자 접기 및 일치시킬 대상 문자열에는 문자의 첫 번째 부분이 포함됩니다.
접힌 부분, 그 뒤에 시작하는 다중 문자 접기가 있는 다른 문자가 옵니다.
접힌 부분의 나머지 부분과 그 이상.
"s\N{U+DF}" =~ /[\x{DF}foo]/i
그러한 경우 중 하나입니다. "\xDF"는 "ss"로 접힙니다. (5.14.1)
· 정규식 패턴 일치의 일부 문자가 일부에서는 올바르게 일치하지 않았습니다.
모든 상황에는 "/i"가 포함됩니다. 영향을 받는 문자는 다음과 같습니다: COMBINING GREEK
YPOGEGRAMMENI, 그리스어 대문자 IOTA, 그리스어 대문자 UPSILON, 그리스어
PROSGEGRAMMENI, 그리스어 소문자 IOTA(DIALYTIKA 및 OXIA 포함), 그리스어 소문자
DIALYTIKA 및 TONOS가 포함된 IOTA, DIALYTIKA 및 OXIA가 포함된 그리스어 소문자 입실론,
DIALYTIKA 및 TONOS가 포함된 그리스어 소문자 입실론, 라틴어 소문자 LONG S, 라틴어
SMALL LIGATURE LONG ST 및 LATIN SMALL LIGATURE ST.
· 스레딩 하의 정규식 컴파일에서 메모리 누수 회귀가 발생했습니다.
고정.
· 5.14.0에 도입된 회귀가 수정되었습니다. 여기에는 역괄호가 포함되었습니다.
유니코드 속성만으로 구성된 정규식의 문자 클래스입니다.
해당 속성은 Latin1 범위 밖에서는 반전되지 않았습니다.
· 이제 문제가 있는 세 개의 유니코드 문자가 정규식 패턴 일치에서 더 잘 작동합니다.
"/나".
과거에는 세 가지 유니코드 문자: LATIN SMALL LETTER SHARP S, GREEK SMALL LETTER
DIALYTIKA 및 TONOS가 포함된 IOTA, DIALYTIKA 및 TONOS가 포함된 그리스어 소문자 입실론
TONOS와 접는 시퀀스(LATIN SMALL의 경우 "ss" 포함)
LETTER SHARP S)가 "/i"에서 제대로 일치하지 않습니다. 5.14.0에서는 이러한 경우 중 일부가 수정되었습니다.
그러나 캐릭터나 시퀀스 중 하나가
"(?(DEFINE)" 정규식 조건자에 사용됩니다. 알려진 버그는 다음과 같습니다.
5.14에 도입된 문제가 이제 수정되었습니다. 뿐만 아니라
지금까지 일한 적이 없습니다. 여기에는 모두 외부의 문자와 시퀀스를 사용하는 것이 포함됩니다.
"/i" 아래에 괄호로 묶인 문자 클래스. 그러면 [perl #98546]이 닫힙니다.
다중 문자 접기와 함께 특정 문자를 사용할 때 알려진 문제가 남아 있습니다.
"qr/[\N{LATIN SMALL"과 같은 구문을 포함하여 괄호 안에 있는 문자 클래스 내부
LETTER SHARP}az]/i". 나머지 버그는 [perl #89774]에서 해결되었습니다.
· RT #78266: 명명된 캡처에 액세스할 때 정규식 엔진에서 메모리 누수가 발생했습니다.
5.10이 도입된 이후로 정규식의 일부로 일치하지 않았습니다. 예:
이렇게 하면 XNUMXMB 이상의 메모리가 소모됩니다.
(1..10_000_000) {
if ("foo" =~ /(foo|(? 술집))?/) {
내 $capture = $+{capture}
}
}
시스템 "ps -o rss $$"'
· 5.14에서는 "/[[:lower:]]/i"와 "/[[:upper:]]/i"가 더 이상 반대 사례와 일치하지 않습니다.
이 문제는 수정되었습니다[perl #101970].
· 오른쪽에 있는 오버로드된 개체와 일치하는 정규식은 다음과 같습니다.
때때로 객체를 너무 많이 문자열화합니다.
· "/i" 정규 표현식에서 5.14에 도입된 회귀가 수정되었습니다.
패턴이 UTF-8인 경우 일치가 부적절하게 실패하는 일치, 대상
문자열이 아니며 Latin-1 문자가 문자열의 문자 앞에 옵니다.
패턴을 일치시킵니다. [펄 #101710]
· 대소문자를 구분하지 않는 정규식 패턴 일치에서 더 이상 UTF-8 인코딩되지 않음
문자열은 가능한 첫 번째 위치에서만 일치 시작을 검색합니다.
이로 인해 ""f\x{FB00}" =~ /ff/i"와 같은 일치가 실패했습니다.
· 고정 문자열을 병합할 때 디버깅 빌드에서 정규식 최적화 프로그램이 더 이상 충돌하지 않습니다.
불편한 내용이 있는 노드.
· 정규식 수정자 "/aa"와 "/aa"의 조합과 관련된 패닉
5.14.0에 도입된 "\b" 이스케이프 시퀀스가 수정되었습니다[perl #95964]. (5.14.2)
· 정규식 수정자 "/aa"와 "\b" 및 "\B" 이스케이프의 조합
UTF-8로 인코딩된 문자열에서는 시퀀스가 제대로 작동하지 않았습니다. ASCII가 아닌 모든 문자
"/aa" 아래의 문자는 단어가 아닌 문자로 처리되어야 하지만 무슨 일이 일어났는지는
ASCII가 아닌 문자의 단어성/비단어성을 결정하는 데 유니코드 규칙이 사용되었습니다.
이 문제는 이제 수정되었습니다[perl #95968].
· "(?foo: ...)"는 더 이상 문자 집합에서 전달된 값을 잃지 않습니다.
· 빈 값을 포함하는 대체에 문제가 있는 데 사용되는 트라이 최적화
"(?:)"로 인해 ""x" =~ /\A(?>(?:(?:)A|B|C?x))\z/"가 일치하지 않지만 일치해야 합니다.
[펄 #111842].
· 정규식에 포함된 코드 블록에서 어휘("my") 변수를 사용하면
더 이상 메모리 손상이나 충돌이 발생합니다.
그럼에도 불구하고 이러한 코드 블록은 여전히 문제가 있기 때문에 아직 실험적입니다.
잘못된 변수가 닫혀 있고(예를 들어 루프에서) 비정상적입니다.
종료(예: "die")로 인해 메모리 손상이 발생합니다.
· 패닉을 유발하는 데 사용되는 "\h", "\H", "\v" 및 "\V" 정규식 메타 문자
문자열 [perl #96354]의 끝 부분에서 일치시키려고 하면 오류 메시지가 나타납니다.
· C1 제어 문자 XNUMX개 "MW" "PM", "RI", "ST"에 대한 약어는 다음과 같습니다.
이전에는 "\N{}"으로 인식되지 않았습니다. 경유이름()및 문자열_비아이름().
· $&(예: "@&" 또는 "%&")가 아닌 "&"라는 변수를 언급해도 더 이상 $&가 중지되지 않습니다.
일부터. "'" 및 "`"라는 변수에도 동일하게 적용됩니다 [perl #24237].
· "UNIVERSAL::AUTOLOAD" 하위 생성이 더 이상 "%+", "%-" 및 "%!"를 중지하지 않습니다. 일하다
가끔은 [perl #105024].
스마트매칭
· "~~"는 이제 Any~~Object의 우선 순위를 올바르게 처리하며
왼쪽에 과부하된 개체가 있습니다.
· Perl 5.14.0에서 "$tainted ~~ @array"가 제대로 작동하지 않습니다. 가끔은 그러겠지
실수로 실패함($tainted에 배열에서 발생하는 문자열이 포함된 경우) 시간 내에 전에,
첫 번째 요소) 또는 잘못 성공(첫 번째 요소 다음에 "undef"가 발생한 경우)
[펄 #93590].
The 종류 연산자
· "sort"는 "sub {}"와 "sub {()}"를 동등한 것으로 취급하지 않았습니다.
비교 루틴으로 제공됩니다. "sub {()}"에서 짖곤 했습니다.
· "정렬"은 이제 XSUB인 사용자 정의 정렬 루틴과 함께 다시 한 번 작동합니다. 멈췄다
5.10.0에서 작업 중입니다.
· 사용자 정의 정렬 루틴에 대한 상수를 사용하는 "정렬"(정렬되지 않은 결과를 생성함)
결과적으로 더 이상 충돌이 발생하지 않습니다. 5.10.0에서 충돌이 발생하기 시작했습니다.
· 사용자 정의 비교 루틴이 숫자가 아닌 값을 반환할 때 "정렬"에 의해 경고가 발생합니다.
이제 값에는 "in sort"가 포함되고 "sort" 연산자의 줄 번호가 표시됩니다.
비교 루틴의 마지막 줄보다 경고는 이제 다음 경우에만 발생합니다.
"정렬"이 발생하는 범위에서는 경고가 활성화됩니다. 이전에는 경고가
비교 루틴의 범위에서 활성화된 경우 발생합니다.
· 내부적으로 최적화된 "sort { $a <=> $b }"는 이제 "uninitialized"를 생성합니다.
NaN(숫자가 아닌 값)에 대한 경고입니다. "<=>"는 NaN에 대해 "undef"를 반환하기 때문입니다. 이것
"sort { 1; $a <=> $b }" 및 기타 더 복잡한 경우와 일치합니다.
최적화되지 않았습니다 [perl #94390].
The "하위 문자열" 연산자
· 묶인(및 기타 마법의) 변수는 더 이상 "사용 시도"에서 제외되지 않습니다.
substr에서 lvalue로 참조" 경고.
· 이제 해당 경고는 "substr"이 아닌 반환된 lvalue가 할당될 때 발생합니다.
자체가 호출됩니다. 이는 "substr"의 반환 값이 다음과 같은 경우에만 차이가 있습니다.
참조하고 나중에 할당합니다.
· 읽기 전용 값의 하위 문자열이나 typeglob을 함수에 전달(잠재적 lvalue)
컨텍스트)는 더 이상 즉각적인 "강제할 수 없음" 또는 "읽기 전용 수정"을 발생시키지 않습니다.
value" 오류입니다. 해당 오류는 전달된 값이 할당된 경우에만 발생합니다.
"문자열 외부의 하위 문자열" 오류에서도 동일한 일이 발생합니다. lvalue가 다음과 같은 경우
읽기만 하고 쓰지 않고 rvalue "substr"과 마찬가지로 이제 경고일 뿐입니다.
· 첫 번째 인수가 동점인 경우 "substr" 할당은 더 이상 FETCH를 두 번 호출하지 않습니다.
변수, 한 번만.
고객 지원 을 통한 임베디드 널
Perl의 일부 부분은 문자열에 포함된 널("chr 0")과 함께 올바르게 작동하지 않았습니다. 저것
예를 들어 "$m = "a\0b"; foo->$m"은 "a" 메서드를 호출하는 대신
$m에 포함된 실제 메소드 이름입니다. Perl의 다음 부분은 null을 지원하도록 수정되었습니다.
· 메소드 이름
· Typeglob 이름(파일 핸들 및 서브루틴 이름 포함)
· "ref()"의 반환 값을 포함한 패키지 이름
· Typeglob 요소(*foo{"THING\0stuff"})
· 신호명
· 변수 이름이나 값, 메소드를 언급하는 다양한 경고 및 오류 메시지
등
이러한 변경의 한 가지 부작용은 "\0"에 대한 축복으로 인해 더 이상 "ref()"가 발생하지 않는다는 것입니다.
거짓을 반환합니다.
스레딩 버그
· 스레드에서 반환된 Typeglobs는 상위 스레드가 이미 복제된 경우 더 이상 복제되지 않습니다.
같은 이름의 글로브입니다. 이는 반환된 서브루틴이 이제 다음에 할당됨을 의미합니다.
올바른 패키지 변수 [perl #107366].
· 복제 중 메모리 할당으로 인해 스레드가 충돌하는 일부 사례가 수정되었습니다.
[펄 #90006].
· 스레드 조인은 다음과 같은 경우 때때로 "참조되지 않은 스칼라를 해제하려고 시도합니다"라는 경고를 내보냅니다.
"caller"는 스레드 생성 이전에 "DB" 패키지에서 사용되었습니다[perl #98092].
· 서브루틴 잠금("lock &sub"를 통해)은 더 이상 일반 컴파일 타임 오류가 아닙니다.
잠수함. lvalue 서브루틴의 경우 더 이상 하위를 스칼라로 반환하려고 시도하지 않습니다.
어떤 경우에는 "ref \$_"가 "CODE"를 반환하는 것과 같은 이상한 부작용이 발생합니다.
thread::shared가 로드되면 "lock &sub"는 이제 런타임 오류입니다(그렇지 않으면 작동하지 않음).
하지만 이는 향후 버전에서 수정될 수 있습니다.
묶여 변수
· FETCH가 무시되거나 너무 많이 호출되는 다양한 경우가 있었습니다.
결정된:
· "PerlIO::get_layers" [perl #97956]
· $tied가 참조를 보유할 때 "$tied =~ y/a/b/", "chop $tied" 및 "chomp $tied".
· "local $_"를 호출할 때 [perl #105912]
· XNUMX인수 "선택"
· "sysread"에 전달된 묶인 버퍼
· "$tied .= <>"
· 세 개의 인수 "open", 세 번째는 연결된 파일 핸들입니다("open $fh, ">&",
$묶음")
· 비교 루틴을 위해 묶인 glob을 참조하여 "정렬"합니다.
· 목록 컨텍스트의 ".." 및 "..." [perl #53554].
· 동률 변수가 반환되는 경우 "${$tied}", "@{$tied}", "%{$tied}" 및 "*{$tied}"
문자열("&{}"는 영향을 받지 않음)
· "${ $tied_variable } 정의됨"
· rvalue 컨텍스트에서 파일 핸들 인수를 취하는 다양한 함수("close",
"readline" 등) [perl #97482]
· "${ (), $tied } = 1"과 같은 복잡한 표현식을 역참조하는 경우,
이전에는 "FETCH"를 여러 번 호출했지만 이제는 한 번만 호출합니다.
· $tied가 패키지 이름을 반환하는 "$tied->method"
메모리 손상으로 인해 메소드 호출
· "*$tied = \&{"..."}" 및 "*glob = $tied"와 같은 할당
· "chdir", "chmod", "chown", "utime", "truncate", "stat", "lstat" 및 filetest
ops("-r", "-x" 등)
· "호출자"는 DB 패키지에서 호출될 때 @DB::args를 서브루틴 인수로 설정합니다.
@DB::args가 묶여 있으면 충돌이 발생하곤 했습니다. 이제 삐걱거린다
대신.
· %ENV 또는 "%^H" 요소를 묶은 다음 해당 요소를 삭제하면
요소 자체를 연결하는 것이 중요하더라도 연결 개체의 DELETE 메서드를 호출합니다.
스칼라를 묶는 것과 동일하다고 가정됩니다(요소는 물론 스칼라입니다).
[펄 #67490].
· Perl이 연결된 배열이나 해시의 요소를 자동 활성화하는 경우(STORE 호출이 수반됨)
새로운 참조 포함) 이제 대신 STORE 직후에 FETCH를 호출합니다.
FETCH가 동일한 참조를 반환했다고 가정합니다. 이렇게 하면 더 쉽게 할 수 있습니다
묶인 객체를 구현하기 위해 [perl #35865, #43011].
· XNUMX인수 "select"는 더 이상 "비문자열이 비트마스크로 전달됨" 경고를 생성하지 않습니다.
문자열인 묶여 있거나 오염된 변수에 대해.
· typeglob을 반환하는 묶인 스칼라를 지역화해도 더 이상 묶이는 것이 중단되지 않습니다.
범위가 끝날 때까지.
· 메모리 손상을 유발하는 데 사용되는 묶인 핸들 방법에서 "goto"를 시도하거나
충돌. 이제 대신 오류 메시지가 생성됩니다 [perl #8611].
· 묶인 변수를 서브루틴으로 사용할 때 발생하는 버그가 수정되었습니다.
참조: 변수에 할당되거나 변수에서 반환된 마지막 항목이
참조 또는 typeglob의 경우 "\&$tied"가 충돌하거나 잘못된 값을 반환할 수 있습니다.
서브루틴. 참조 사례는 Perl 5.10.0에 도입된 회귀입니다. 을 위한
typeglobs, 아마도 지금까지 작동한 적이 없을 것입니다.
버전 사물 그리고 vstring
· 비트 보수 연산자(그리고 다른 연산자도 가능)
vstring은 문자열이 반환되는 경우에도 vstring 매직을 반환 값에 첨부된 상태로 둡니다.
변했다. 이는 "version->new(~v1.2.3)"이 다음과 같은 버전을 생성한다는 것을 의미합니다.
"version->new"에 전달된 문자열이 실제로는 "v1.2.3"과 같지만
"\376\375\374". 이로 인해 B::Deparse가 "~v1.2.3"을 잘못 구문 분석하게 되었습니다.
"~" [펄 #29070].
· vstring을 매직(예: 동점, $!) 변수에 할당한 다음 무언가 할당
그렇지 않으면 모든 마법을 날려버리는 데 사용됩니다. 이는 묶인 변수가 실행 취소된다는 것을 의미합니다.
$! 시스템 호출이 실패하면 업데이트가 중단됩니다. $| 자동 플러시 설정이 중지됩니다.
그리고 다른 장난이 일어날 것입니다. 이 문제가 해결되었습니다.
· "version->new("version")" 및 "printf "%vd", "version""은 더 이상 충돌하지 않습니다. [perl
#102586].
· "v5.43 사용"을 통해 암시적으로 발생하는 것과 같은 버전 비교는 더 이상 수행되지 않습니다.
로케일 설정이 변경됩니다 [perl #105784].
· 버전 개체는 더 이상 부울 컨텍스트에서 메모리 누수를 일으키지 않습니다[perl #109762].
경고, 재정의
· "autouse" 네임스페이스의 서브루틴은 다시 한 번 재정의에서 제외됩니다.
경고. 이는 5.005에서는 작동했지만 5.6에서는 대부분의 서브루틴에서 중단되었습니다.
"autouse" 패키지의 서브루틴을 재정의하는 XS를 통해 생성된 서브의 경우
5.10에서 작동이 중지되었습니다.
· 새로운 XSUB는 이제 기존 하위를 덮어쓰는 경우 재정의 경고를 생성합니다.
5.8.x에서 그랬습니다. ("autouse" 논리는 5.10-14에서 반전되었습니다.
"autouse" 네임스페이스는 방해를 받을 때 경고합니다.)
· "newCONSTSUB"은 런타임 힌트 대신 컴파일 타임 경고 힌트를 사용하는 데 사용됩니다. 그만큼
다음 코드는 재정의 경고를 생성해서는 안 되지만, 예전에는 그랬습니다.
"newCONSTSUB"은 기존 서브루틴을 재정의했습니다.
경고를 사용하십시오.
시작하다 {
경고 없음;
some_XS_function_that_calls_new_CONSTSUB();
}
· 상수 서브루틴에 대한 재정의 경고는 기본적으로 켜져 있습니다.
perldiag의 심각한 경고). 이는 glob 할당일 때만 발생했습니다.
경고를 발생시킨 Perl 서브루틴 선언. XSUB를 생성하는 경우
경고가 발생했지만 이는 기본 경고가 아니었습니다. 이 문제가 수정되었습니다.
· 재정의 경고가 발생해야 하는지 여부를 확인하기 위한 내부 검사를 사용하여 방출합니다.
다음과 같은 경우 "초기화되지 않은" 경고:
"초기화되지 않음" 경고를 사용하십시오.
상수 {u => undef, v => undef}를 사용합니다.
하위 foo(){u}
하위 foo(){v}
경고, "초기화되지 않음"
· rvalue 컨텍스트에서 파일 핸들 인수를 취하는 다양한 함수("close",
"readline" 등)은 정의되지 않은 핸들에 대해 두 번 경고하는 데 사용됩니다[perl #97482].
· "dbmopen"은 이제 모드 인수가 다음과 같은 경우 세 번이 아니라 한 번만 경고합니다.
"undef" [펄 #90064].
· "+=" 연산자는 일반적으로 왼쪽이 "undef"일 때 경고하지 않습니다.
묶인 변수에 대해 그렇게 합니다. 이 문제는 수정되었습니다[perl #44895].
· Perl 5.14의 버그 수정으로 인해 "초기화되지 않은" 경고가 발생하는 새로운 버그가 도입되었습니다.
문제의 연산자에 두 개의 피연산자가 있고 그 중 하나가 다음인 경우 잘못된 변수를 보고합니다.
"%{...}" 또는 "@{...}". 이 문제는 수정되었습니다[perl #103766].
· 목록 컨텍스트의 ".." 및 "..."는 이제 "초기화되지 않음"의 변수 이름을 언급합니다.
문자열(숫자 아님) 범위에 대한 경고입니다.
약한 참조
· 자동으로 호출되는 "DESTROY" 메서드에 대한 첫 번째 인수를 약화하면 결과가 발생할 수 있습니다.
잘못된 "DESTROY가 새 참조를 생성했습니다" 오류 또는 충돌이 발생합니다. 이제 오류가 발생했습니다.
읽기 전용 참조를 약화시킵니다.
· 범위를 벗어나는 어휘 해시에 대한 약한 참조는 오래되지 않았습니다(
정의되지 않음), 그러나 계속해서 해시를 가리켰습니다.
· 범위를 벗어나는 어휘 변수에 대한 약한 참조는 이제
마법의 메소드(예: 연결 객체에 대한 DESTROY)가 호출됩니다. 이는 그러한 것을 방지합니다
다음에 범위가 표시될 변수를 수정하는 방법
입력했습니다.
· @ISA 배열에 대한 약한 참조를 생성하거나 배열 인덱스($#ISA)에 액세스하면
나중에 @ISA 배열에 추가된 요소에 대해 혼란스러운 내부 기록이 발생합니다.
예를 들어 요소 자체에 대한 약한 참조를 생성하면 해당 요소가 약한 참조로 푸시될 수 있습니다.
@ISA에 대한 참조; $#ISA 사용 후에 추가된 요소는 메소드에 의해 무시됩니다.
[perl #85670]을 찾아보세요.
기타 주목할 만한 고정 된
· "quotemeta"는 이제 "사용 기능"에서 동일한 비ASCII 문자를 일관되게 인용합니다.
문자열이 UTF-8로 인코딩되었는지 여부에 관계없이 'unicode_strings'", 따라서
악명 높은 "유니코드 버그"의 마지막 흔적을 수정하기를 바랍니다.
퍼루니코드. [펄 #77654].
인용된 코드 포인트는 유니코드 권장 사항에 따라 변경되었습니다.
자세한 내용은 perlfunc의 "quotemeta"를 참조하세요.
· "연구"는 이제 작동하지 않으며 아마도 연구와 관련된 모든 뛰어난 버그를 수정했을 것입니다.
정규식 일치가 잘못 작동하게 만듭니다!
· Perl 4에서 작동했던 "open foo || die"를 작성하면 "우선순위"
문제" 경고가 생성됩니다. 이 경고는 전체에 적용하기 위해 잘못 사용되었습니다.
정규화된 베어워드 핸들 이름 뒤에 "||"가 오지 않습니다. 이 문제가 수정되었습니다.
· 패키지 별칭 지정("*foo:: = *bar::") 후에 0 또는 1개의 인수를 사용하는 "select"는
때로는 파일 핸들을 참조하는 데 사용할 수 없는 이름을 반환하거나
때로는 파일 핸들이 선택된 경우에도 "undef"를 반환합니다. 이제 돌아옵니다
그러한 경우에는 typeglob 참조입니다.
· "PerlIO::get_layers"는 더 이상 숫자라고 생각되는 일부 인수를 무시하지 않습니다.
다른 사람을 파일 핸들 이름으로 취급합니다. 이제 플랫 스칼라에 대해 일관됩니다.
(즉, 참조가 아님)
· "#!"의 인식할 수 없는 스위치 선
스위치와 같은 경우 -x, "#!"에서는 발생할 수 없습니다. 거기에 줄이 사용되면 Perl은 죽습니다
"에뮬레이션할 수 없습니다...".
Perl이 전혀 인식하지 못하는 스위치에 대해 동일한 메시지를 생성하곤 했습니다.
명령줄에서든 "#!"에서든 선.
이제 "인식할 수 없는 스위치" 오류 메시지가 생성됩니다[perl #104288].
· "시스템"은 이제 일시적으로 SIGCHLD 신호 처리기를 차단하여 신호를 방지합니다.
핸들러가 종료 상태를 훔치는 것을 방지합니다 [perl #105700].
· "printf" 및 "sprintf"에 대한 %n 형식화 코드는
다음 인수에 할당할 문자는 이제 실제로
바이트 수 대신 문자입니다.
또한 이제 "substr"과 같은 특수 lvalue 함수 및 존재하지 않는 함수에서도 작동합니다.
해시 및 배열 요소 [perl #3471, #103492].
· Perl은 속도를 위해 서브루틴에서 반환된 값 복사를 건너뜁니다.
그래서 눈에 띄는 차이는 없을 것입니다. 잘못된 논리로 인해 이런 일이 발생합니다
결과가 참조된 경우에도 "삭제", "이동" 또는 "접속" 결과 포함
다른 곳. 또한 곧 해제될 묶인 변수에 대해서도 그렇게 했습니다. [perl #91844,
#95548].
· "utf8::decode"는 이제 읽기 전용 스칼라 수정을 거부합니다[perl #91850].
· 일반 블록에 포함된 코드 블록인 "grep" 또는 "map" 블록 내부의 $_를 해제합니다.
표현식 또는 @INC 필터(@INC의 서브루틴에 의해 반환된 서브루틴)
이중 해제 또는 충돌이 발생합니다 [perl #91880, #92254, #92256].
· "eval"은 스칼라 컨텍스트에서 "undef"를 반환하거나 목록 컨텍스트에서 빈 목록을 반환합니다.
런타임 오류입니다. "eval"이 목록 컨텍스트의 문자열과 구문으로 전달된 경우
오류가 발생하면 정의되지 않은 단일 요소가 포함된 목록을 반환하는 데 사용되었습니다. 지금
모든 오류에 대해 목록 컨텍스트에서 빈 목록을 반환합니다 [perl #80630].
· "goto &func"는 더 이상 충돌하지 않지만, 해제할 때 오류 메시지를 생성합니다.
현재 서브루틴의 범위는 해당 서브루틴을 정의 취소하는 소멸자를 실행합니다.
"goneto" [펄 #99850].
· Perl은 이제 코드가 현재 존재하는 패키지에 대한 추가 참조 카운트를 보유합니다.
컴파일 중입니다. 이는 다음 코드가 더 이상 충돌하지 않음을 의미합니다[perl #101486]:
패키지 푸;
BEGIN {*Foo:: = *바::}
하위 foo;
· 큰 반복이 있는 64비트 빌드에서 "x" 반복 연산자가 더 이상 충돌하지 않습니다.
[perl #94560]을 계산합니다.
· *CORE::GLOBAL::require가 재정의된 경우 암시적 $_에 대해 "require" 호출
더 이상 segfault가 발생하지 않으며 $_는 이제 우선하는 서브루틴 [perl]에 전달됩니다.
#78260].
· "use" 및 "require"는 더 이상 호출자의 활성 I/O 레이어에 의해 영향을 받지 않습니다.
범위(open.pm에 의해 활성화됨) [perl #96008].
· "our $::e; $e"(유효하지 않음)는 더 이상 "컴파일 오류"를 생성하지 않습니다.
lib/utf8_heavy.pl..." 오류 메시지, 5.10.0에서 내보내기 시작함 [perl
#99984].
· 64비트 시스템에서 "read()"는 이제 32비트를 넘어서는 큰 문자열 오프셋을 이해합니다.
에 대해서도 소개했습니다.
· 서브루틴 속성을 처리할 때 발생하는 오류로 인해 더 이상 오류가 발생하지 않습니다.
서브루틴의 연산 트리가 누출됩니다.
· "index"와 "formline" 모두에 동일한 상수 서브루틴을 전달하면 더 이상
둘 중 하나가 실패합니다 [perl #89218]. (5.14.1)
· 동일한 명령문에서 속성으로 선언된 어휘 변수에 대한 목록 할당
("my ($x,@y) : blimp = (72,94)") Perl 5.8.0에서 작동이 중지되었습니다. 이제는 되었다
고정.
· Perl 5.10.0은 팩 중간에 "U*"를 만드는 잘못된 논리를 도입했습니다.
입력 문자열이 비어 있는 경우 "U0"에 해당하는 템플릿입니다. 이것은 수정되었습니다 [펄
#90160]. (5.14.2)
· 개체에 대한 소멸자는 개체에 대한 전역 소멸 중에 호출되지 않았습니다.
어떤 스칼라에서도 참조되지 않습니다. 배열 요소가 축복을 받은 경우 이런 일이 발생할 수 있습니다.
(예: "bless \$a[0]") 또는 클로저가 축복받은 변수를 참조한 경우("bless \my @a;
하위 foo { @a }").
이제 전역 파괴 중에 어느 위치에서든 소멸자를 발사할 수 있는 추가 패스가 있습니다.
참조된 개체를 확인하는 일반적인 단계 이후에 남을 수 있는 개체
스칼라 [perl #36347].
· 해제된 버퍼를 읽을 수 있는 경우가 수정되었습니다.
여기 문서를 구문 분석합니다 [perl #90128]. (5.14.1)
· "각(정렬)" 이제 "each(해시시)", "동안" 안에
조건 [perl #90888].
· "do" 블록이 "return"에 대한 인수일 때 컨텍스트 전파에 대한 문제가 있습니다.
수정되었습니다. "return"의 특정 경우에 "undef"가 반환되도록 했습니다.
"if" 블록 내부에는 또 다른 "return"이 뒤따릅니다.
· 오염된 상수로 "인덱스"를 호출해도 더 이상 이후에 상수가 발생하지 않습니다.
컴파일된 코드가 오염되었습니다 [perl #64804].
· "엄격한 '서브'" 모드가 작동하는 것을 중지하는 데 사용되는 "1 while 1"과 같은 무한 루프
나머지 블록.
· "($a,$b) = ($b,$a)"와 같은 목록 할당의 경우 Perl은 항목의 복사본을 만들어야 합니다.
왼쪽에 할당하기 전에 오른쪽에 있습니다. 효율성을 위해서,
변수가 없으면 오른쪽의 값을 왼쪽의 항목에 바로 할당합니다.
"($a,$b) = ($c,$d)"와 같이 양쪽에서 언급됩니다. 시기를 결정하는 논리
속일 수 있는 것은 "&&"와 "||"라는 점에서 결함이 있었습니다. 오른쪽에 있으면 속일 수 있습니다.
따라서 "($a,$b) = $some_true_value && ($b,$a)"는 결국 $b의 값을 다음에 할당하게 됩니다.
스칼라 둘 다.
· Perl은 더 이상 "("string", $variable)의 문자열에 lvalue 컨텍스트를 적용하려고 시도하지 않습니다.
||= 1"(이전에는 오류였습니다.) "||="의 왼쪽은 다음에서 평가되므로
스칼라 컨텍스트, 이는 마지막 항목을 제외한 모든 항목을 무효화하는 스칼라 쉼표 연산자입니다.
문맥. void lvalue 컨텍스트 같은 것이 없으므로 Perl의 실수였습니다.
강제로 시도하려고 합니다 [perl #96942].
· @DB::args가 다음과 같은 경우 DB 패키지에서 호출할 때 "호출자"가 더 이상 메모리 누수를 일으키지 않습니다.
"발신자"에 대한 첫 번째 통화 이후에 할당됩니다. Carp가 이 버그를 유발했습니다. [perl
#97010]. (5.14.2)
· 내장된 전역 변수에 대해 호출되는 경우 "close" 및 유사한 파일 핸들 함수
(예: $+), 변수가 정의되지 않은 값을 보유하게 되면 죽는 데 사용됩니다.
일반적인 "초기화되지 않은 값 사용" 경고가 발생합니다.
· Perl 5.6.0에 자동 활성화된 파일 핸들이 도입되었을 때 "readline"은
"readline($foo)"로 호출될 때 실수로 자동 활성화되도록 만들어졌습니다.
"<$foo>"). 이제 자동 활성화되지 않도록 수정되었습니다.
· 정의되지 않은 익명 서브루틴 호출(예: "undef &{$x = 다음에 $x가 보유하는 것)
sub{}}")는 "CODE 참조가 아님" 오류를 발생시키는 데 사용되었으며, 이는 다음과 같이 수정되었습니다.
"정의되지 않은 서브루틴 호출됨" [perl #71154].
· "호출자" 사용 사이에 @DB::args를 해제해도 더 이상 충돌이 발생하지 않습니다.
[펄 #93320].
· "setpgrp($foo)"는 "($foo, setpgrp)"와 동일했습니다.
하나만 있다면 그 주장을 무시합니다. 이제는 다음과 같습니다.
"setpgrp($foo,0)".
· 공유 메모리에서 읽을 때 "shmread"가 스칼라 플래그를 올바르게 설정하지 않았습니다.
스칼라의 기존 캐시된 숫자 표현이 지속되도록 합니다. [perl
#98480].
· "++" 및 "--"는 이제 죽는 대신 glob 복사본에서 작동합니다.
· "splice()"는 자를 때 경고하지 않습니다.
이제 걱정 없이 "splice(@a,MAX_LEN)"을 사용하여 배열 크기를 제한할 수 있습니다.
경고에 대해.
· $$는 더 이상 오염되지 않습니다. 이 값은 "getpid()"에서 직접 가져오므로 다음과 같습니다.
항상 안전합니다.
· 구문 분석이 시작되기 전에 STDIN이 닫힌 경우 구문 분석기가 더 이상 파일 핸들을 누출하지 않습니다.
[펄 #37033].
· "죽다;" 현재 $@에 비참조, 비문자열 또는 마법(예: 오염) 값이 있는 경우
해당 값을 올바르게 전파합니다[perl #111654].
알려진 문제
· 솔라리스에는 두 가지 종류의 실패가 있습니다.
If 확인 썬의 것입니다 확인, 잘못된 형식의 매크로 할당에 대한 오류가 발생합니다.
Makefile. 그런 일이 일어날 때 ./configure를 따라 만들려고합니다. 구성 그런 다음 종료
0이지만 더 나아가 확인-ing이 실패합니다.
If 확인 is 지메이크, 구성 완료되면 다음과 관련된 오류가 발생합니다.
/usr/include/stdbool.h
· Win32에서는 STDERR이 리디렉션되지 않으면 여러 테스트가 중단됩니다. 그 원인은
아직 조사 중입니다.
· 파일을 다른 사람이 읽을 수 없도록 방지하는 umask를 사용하여 루트로 빌드하는 경우,
t/op/filetest.t 실패할 것이다. 이것은 테스트 버그이지 Perl 동작의 버그가 아닙니다.
· "Configure"와 같은 최신 gcc 및 링크 시간 최적화로 구성
-Doptimize='-O2 -flto'"는 최적화 프로그램이 구성의 일부를 최적화하기 때문에 실패합니다.
테스트. 해결 방법은 구성을 실행할 때 "-flto" 플래그를 생략하고 추가하는 것입니다.
실제로 건물을 짓는 동안 다시 들어옵니다.
sh 구성 -Doptimize=-O2
OPTIMIZE='-O2 -flto'로 설정하세요.
· 다음 CPAN 모듈은 Perl 5.16에서 테스트에 실패했습니다. 패치가 적용되었습니다.
이 모든 항목에 대해 제출되었으므로 곧 새 릴리스가 출시되기를 바랍니다.
· 날짜::Pcalc 버전 6.1
· 모듈::CPANTS::분석 버전 0.85
Module::Find 0.10 및 File::MMagic 1.27의 문제로 인해 실패합니다.
· PerlIO::Util 버전 0.72
감사의 글
Perl 5.16.0은 Perl 12 이후 약 5.14.0개월의 개발 기간을 나타냅니다.
590,000명의 작성자가 작성한 2,500개 파일에 걸쳐 약 139줄의 변경 내용이 포함되어 있습니다.
Perl은 활발한 사용자 커뮤니티 덕분에 세 번째 XNUMX년 동안 계속해서 번창하고 있습니다.
그리고 개발자. 다음 사람들은 개선에 기여한 것으로 알려져 있습니다.
Perl 5.16.0이 되었습니다.
Aaron Crane, Abhijit Menon-Sen, Abigail, Alan Haggai Alavi, Alberto Simo~es, Alexandra
치오르니, 안드레아스 쾨닉, 앤디 도허티, 아리스토텔레스 파갈치스, 보 요한슨, 보 린드버그,
Breno G. de Oliveira, 브라이언 디 포이, 브라이언 프레이저, 브라이언 그린필드, 칼 헤이터, Chas.
오웬스, 치아량 카오, 칩 잘젠버그, 크리스 'BinGOs' 윌리엄스, 크리스티안 한센,
크리스토퍼 J. 매드슨(Christopher J. Madsen), 반음계, 클라에스 제이콥슨(Claes Jacobsson), 클라우디오 라미레즈(Claudio Ramirez), 크레이그 A. 베리(Craig A. Berry), 데미안(Damian)
콘웨이, 다니엘 칸 길모어, 다린 맥브라이드, 데이브 롤스키, 데이비드 캔트렐, 데이비드 골든,
데이빗 리드비터, 데이빗 미첼, 디 뉴컴, 데니스 카어스메이커, 도미닉 하그리브스,
더글라스 크리스토퍼 윌슨, 에릭 브라인, 크리소스토모스 신부, 플로리안 라그비츠, 프레데릭
브리에르, 조지 그리어, 제라드 구센, 지슬 아스, H.메린 브랜드, 윤호중, 이안
Goodacre, James E Keenan, Jan Dubois, Jerry D. Hedden, Jesse Luehrs, Jesse Vincent, Jilles
Tjoelker, Jim Cromie, Jim Meyering, Joel Berger, Johan Vromans, Johannes Plunien, John
호킨슨, 존 P. 린더만, 존 피콕, 조슈아 벤 조레, 주어드 발보어, 칼
윌리엄슨, 카틱 라자고팔란, 키스 톰슨, 케빈 J. 울리, 케빈 라이드, 로랑
다미, 레오 랩워스, 레온 브로카드, 레온 티머만스, 루이스 스트로우스, 루카스 마이, 마크 그린,
마르셀 그루나워, 마크 A. 스트랫먼, 마크 두슨, 마크 제이슨 도미너스, 마틴 해쉬,
매튜 호스폴, 맥스 마이샤인, 마이클 G 슈베른, 마이클 위튼, 마이크 쉘드레이크, 모리츠
렌츠, 니콜라스 클락, 니코 타이니, 누노 카르발류, 파우 암마, 폴 에반스, 폴 그린, 폴
존슨, 펄러버, 피터 존 아클람, 피터 마티니, 피터 스콧, 필 몬슨, 피노
토스카노, 라파엘 가르시아-수아레즈, 라이너 태머, 레이니 우르반, 리카르도 시그네스, 로빈 바커,
로돌포 카르발류, 살바도르 판디노, 샘 킴브렐, 사무엘 티볼트, 숀 M 무어, 시게야
스즈키, 시라카타 켄타로, 쉬로미 피쉬, 시시포스, 슬라벤 레직, 스피로스 데낙사스, 스테펜
뮐러, 스테펜 슈위곤, 스티븐 베넷, 스티븐 오버홀처, 스테반 리틀, 스티브 헤이,
스티브 피터스, 토마스 시블리, 토르스텐 글레이저, 티모시 리트, 토드 리날도, 톰
크리스티안센, 톰 휴킨스, 토니 쿡, 바딤 코노발로프, 빈센트 피트, 블라디미르 티모페예프, 월트
Mankowski, Yves Orton, Zefram, Zsban Ambrus, AEvar Arnfjoer` Bjarmason.
위의 목록은 다음에서 자동으로 생성되므로 거의 확실히 불완전합니다.
버전 제어 기록. 특히, (대부분)의 이름을 포함하지 않습니다.
감사합니다) Perl 버그 추적기에 문제를 보고한 기여자.
이 버전에 포함된 많은 변경 사항은 다음에 포함된 CPAN 모듈에서 비롯되었습니다.
펄의 핵심. Perl이 번창할 수 있도록 도와준 전체 CPAN 커뮤니티에 감사드립니다.
Perl의 역사적 기여자 전체 목록을 보려면 다음을 참조하십시오. 작가
Perl 소스 배포판의 파일.
통계 보고서 버그
버그라고 생각되는 것을 찾으면 최근에 게시된 기사를 확인할 수 있습니다.
comp.lang.perl.misc 뉴스그룹 및 Perl 버그 데이터베이스http://rt.perl.org/perlbug/>.
다음 사이트에도 정보가 있을 수 있습니다.http://www.perl.org/>, Perl 홈 페이지.
보고되지 않은 버그가 있다고 생각되면 포함된 perlbug 프로그램을 실행하십시오.
당신의 석방. 버그를 작지만 충분한 테스트 케이스로 줄이십시오. 당신의 버그
보고서는 "perl -V"의 출력과 함께 다음으로 전송됩니다. perlbug@perl.org 될
Perl 포팅 팀에서 분석했습니다.
보고하는 버그에 보안 관련 사항이 있어 보고하는 것이 부적절할 경우
공개적으로 보관된 메일링 리스트로 보낸 다음 다음 주소로 보내주십시오.
perl5-security-report@perl.org. 이것은 닫힌 구독 보관되지 않은 메일링을 가리킵니다.
여기에는 영향을 평가하는 데 도움을 줄 수 있는 모든 핵심 커미터가 포함됩니다.
문제를 해결하고, 해결 방법을 찾고, 완화할 패치 릴리스를 조정하는 데 도움을 줍니다.
또는 Perl이 지원되는 모든 플랫폼에서 문제를 해결하세요. 이것을 이용해주세요
모듈 자체가 아닌 Perl 코어의 보안 문제만 해결합니다.
CPAN에 배포됩니다.
onworks.net 서비스를 사용하여 온라인으로 perl5160delta 사용