GoGPT Best VPN GoSearch

ไอคอน Fav ของ OnWorks

perl5160delta - ออนไลน์ใน Cloud

เรียกใช้ perl5160delta ในผู้ให้บริการโฮสต์ฟรีของ OnWorks ผ่าน Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

นี่คือคำสั่ง perl5160delta ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

โครงการ:

ชื่อ


perl5160delta - มีอะไรใหม่สำหรับ perl v5.16.0

DESCRIPTION


เอกสารนี้อธิบายความแตกต่างระหว่างรุ่น 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

แกน การเพิ่มประสิทธิภาพ


"ใช้ VERSION"
ในการเปิดตัวนี้ การประกาศเวอร์ชันเช่น "use v5.16" ตอนนี้ปิดใช้งานคุณลักษณะทั้งหมดก่อนหน้านี้
เปิดใช้งานชุดคุณลักษณะใหม่ ซึ่งหมายความว่าสิ่งต่อไปนี้ถือเป็นจริง:

ใช้ 5.016;
# เปิดใช้งานคุณสมบัติ 5.16 เท่านั้นที่นี่
ใช้ 5.014;
# เปิดใช้งานคุณสมบัติ 5.14 เท่านั้นที่นี่ (ไม่ใช่ 5.16)

"use v5.12" และสูงกว่าจะเปิดใช้งานแบบเข้มงวดต่อไป แต่ "ใช้แบบเข้มงวด" และ "no ." อย่างชัดแจ้ง
เข้มงวด" ตอนนี้แทนที่การประกาศเวอร์ชัน แม้ว่าจะมาก่อน:

ไม่เข้มงวด
ใช้ 5.012;
#ที่นี่ไม่มีเข้มงวด

มีชุดคุณลักษณะ ":default" ใหม่ที่แสดงถึงชุดคุณลักษณะที่เปิดใช้งาน
ก่อนที่จะมีการประกาศเวอร์ชันหรือ "คุณสมบัติการใช้งาน" ใดๆ ประกาศเวอร์ชั่นด้านล่าง
5.10 ตอนนี้เปิดใช้งานชุดคุณสมบัติ ":default" สิ่งนี้ไม่ได้เปลี่ยนพฤติกรรมของ
"use v5.8" เนื่องจากคุณสมบัติที่เพิ่มเข้าไปในชุด ":default" คือคุณลักษณะที่เหมือนเดิม
เปิดใช้งานโดยค่าเริ่มต้น ก่อนที่จะสามารถปิดได้

ขณะนี้ "ไม่มีคุณลักษณะ" จะรีเซ็ตเป็นชุดคุณลักษณะเริ่มต้น เพื่อปิดการใช้งานคุณสมบัติทั้งหมด (ซึ่งก็คือ
น่าจะเป็นคำขอที่มีวัตถุประสงค์พิเศษค่อนข้างมาก เนื่องจากไม่น่าจะตรงกับชื่อใดๆ
ชุดของความหมาย) ตอนนี้คุณสามารถเขียนว่า "ไม่มีคุณลักษณะ ':ทั้งหมด'"

$[ ถูกปิดใช้งานภายใต้ "use v5.16" เป็นส่วนหนึ่งของชุดคุณสมบัติเริ่มต้นและสามารถ
เปิดหรือปิดอย่างชัดเจนด้วย "ใช้คุณลักษณะ 'array_base'"

"__SUB__"
โทเค็น "__SUB__" ใหม่ พร้อมใช้งานภายใต้คุณสมบัติ "current_sub" (ดูคุณสมบัติ) หรือ "use
v5.16" ส่งคืนการอ้างอิงไปยังรูทีนย่อยปัจจุบัน ทำให้เขียนซ้ำได้ง่ายขึ้น
การปิด

ใหม่ และ ปรับตัวดีขึ้น ในตัว
เพิ่มเติม คงเส้นคงวา "อีวัล"

ตัวดำเนินการ "eval" บางครั้งถือว่าอาร์กิวเมนต์สตริงเป็นลำดับของอักขระและ
บางครั้งเป็นลำดับของไบต์ ขึ้นอยู่กับการเข้ารหัสภายใน ภายใน
การเข้ารหัสไม่ควรสร้างความแตกต่าง แต่มีรหัสที่ต้องอาศัยสิ่งนี้
ความไม่สอดคล้องกัน

คุณลักษณะ "unicode_eval" และ "evalbytes" ใหม่ (เปิดใช้งานภายใต้ "use 5.16.0") แก้ไขปัญหานี้
คุณลักษณะ "unicode_eval" ทำให้ "eval $string" ดำเนินการกับสตริงเป็น Unicode เสมอ
คุณลักษณะ "evalbytes" มีฟังก์ชันที่เรียกว่า "evalbytes" ซึ่งประเมิน
อาร์กิวเมนต์เป็นสตริงของไบต์เสมอ

คุณสมบัติเหล่านี้ยังแก้ไขสิ่งแปลกประหลาดด้วยตัวกรองต้นทางที่รั่วไหลไปยังขอบเขตไดนามิกภายนอก

ดูคุณสมบัติสำหรับรายละเอียดเพิ่มเติม

"ย่อย" ค่า ปะ

เมื่อเรียก "substr" ในบริบท lvalue หรือ lvalue ที่เป็นไปได้ด้วยอาร์กิวเมนต์สองหรือสามข้อ
สเกลาร์ lvalue พิเศษถูกส่งกลับที่แก้ไขสตริงเดิม (อาร์กิวเมนต์แรก)
เมื่อได้รับมอบหมายให้

ก่อนหน้านี้ ออฟเซ็ต (อาร์กิวเมนต์ที่สองและสาม) ที่ส่งผ่านไปยัง "substr" จะเป็น
แปลงทันทีเพื่อให้ตรงกับสตริง การชดเชยค่าลบจะถูกแปลเป็นค่าบวก
และออฟเซ็ตเกินส่วนท้ายของสตริงที่ถูกตัดทอน

ตอนนี้ ออฟเซ็ตจะถูกบันทึกโดยไม่มีการดัดแปลงในสเกลาร์ lvalue พิเศษ นั่นคือ
ส่งคืน และสตริงดั้งเดิมไม่ได้ถูกดูโดย "substr" ด้วยซ้ำ แต่เมื่อ
lvalue ที่ส่งคืนถูกอ่านหรือแก้ไข

การเปลี่ยนแปลงเหล่านี้ส่งผลให้เกิดการเปลี่ยนแปลงที่เข้ากันไม่ได้:

หากสตริงเดิมเปลี่ยนความยาวหลังจากการเรียกเป็น "substr" แต่ก่อนกำหนดเป็น
ผลตอบแทนของมัน ออฟเซ็ตติดลบจะจำตำแหน่งของพวกเขาจากจุดสิ้นสุดของ
สตริงที่ส่งผลต่อโค้ดดังนี้:

$string ของฉัน = "สตริง";
$lvalue ของฉัน = \substr $string, -4, 2;
พิมพ์ $$lvalue, "\n"; #พิมพ์ "รี"
$string = "เส้นใหญ่ประกันตัว";
พิมพ์ $$lvalue, "\n"; # พิมพ์ "wi"; เคยพิมพ์ "อิล"

สิ่งเดียวกันนี้เกิดขึ้นกับอาร์กิวเมนต์ที่สามที่ถูกละไว้ lvalue ที่ส่งคืนจะเป็นเสมอ
ขยายไปยังส่วนท้ายของสตริง แม้ว่าสตริงจะยาวขึ้นก็ตาม

เนื่องจากการเปลี่ยนแปลงนี้ทำให้สามารถแก้ไขข้อผิดพลาดได้มากมาย (ดู "ตัวดำเนินการ "substr") และ
เนื่องจากไม่เคยมีการระบุพฤติกรรมของการชดเชยค่าลบ จึงถือว่ามีการเปลี่ยนแปลง
ยอมรับได้

บริการรถส่ง ความคุ้มค่า of "ผูก"

ค่าที่ส่งคืนโดย "ผูก" บนตัวแปรที่ผูกไว้ตอนนี้เป็นสเกลาร์จริงที่เก็บ
วัตถุที่ผูกกับตัวแปร นี้จะช่วยให้ความสัมพันธ์อ่อนแอลงกับ
"สเกลาร์::Util::weaken(ผูก $tied_variable)"

Unicode ฝ่าย Support ที่หลากหลาย
รองรับ (เกือบ) Unicode 6.1

นอกเหนือจากการเพิ่มสคริปต์ใหม่ทั้งหมด และอักขระใหม่ในสคริปต์ที่มีอยู่แล้ว
Unicode เวอร์ชันใหม่ทำการเปลี่ยนแปลงบางอย่างกับอักขระที่มีอยู่เช่นเคย หนึ่งการเปลี่ยนแปลง
ที่อาจสะดุดแอพบางตัวคือประเภททั่วไปของตัวอักษรสองตัวใน
ช่วง Latin-1, PILCROW SIGN และ SECTION SIGN, ถูกเปลี่ยนจาก Other_Symbol เป็น
อื่นๆ_เครื่องหมายวรรคตอน มีการเปลี่ยนแปลงแบบเดียวกันสำหรับตัวละครในแต่ละทิเบต
เอธิโอเปียและอีเจียน รหัสชี้ U+3248..U+324F (วงกลมเลขสิบบน BLACK SQUARE
ผ่าน CIRCLED NUMBER EIGHTY ON BLACK SQUARE) ได้เปลี่ยนหมวดหมู่ทั่วไปแล้ว
จาก Other_Symbol เป็น Other_Numeric คุณสมบัติ Line Break มีการเปลี่ยนแปลงสำหรับภาษาฮิบรูและ
ญี่ปุ่น; และเนื่องจากการเปลี่ยนแปลงอื่นๆ ใน 6.1 นิพจน์ทั่วไปของ Perl จึงสร้าง "\X"
ตอนนี้ทำงานแตกต่างกันสำหรับอักขระบางตัวในภาษาไทยและภาษาลาว

มีการกำหนดนามแฝงใหม่ (คำพ้องความหมาย) สำหรับค่าคุณสมบัติหลายค่า เหล่านี้พร้อมกับ
ที่มีอยู่ก่อนหน้านี้ทั้งหมดทำดัชนีข้ามใน perluniprops

ค่าส่งคืนของ "charnames::viacode()" ได้รับผลกระทบจากการเปลี่ยนแปลงอื่นๆ:

โค้ดพอยท์ ชื่อเดิม ชื่อใหม่
U+000A ไลน์ฟีด (LF) LINE FEED
แบบฟอร์มฟีด 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 ฟังก์ชันอักษรตัวพิมพ์ใหญ่ WEIERSTRASS ELLIPTIC

Perl จะยอมรับชื่อเหล่านี้เป็นอินพุต แต่ "charnames::viacode()" จะคืนค่า
ชื่อใหม่ของแต่ละคู่ การเปลี่ยนแปลงสำหรับ U+2118 ถือเป็นการแก้ไขโดย Unicode
ว่าชื่อเดิมผิด (แต่จะใช้ได้ตลอดไป)
เพื่ออ้างถึง U+2118) แต่การเปลี่ยนแปลงส่วนใหญ่เกิดจากความผิดพลาดของ Unicode 6.0
ทำในการตั้งชื่อตัวละครที่ใช้ในโทรศัพท์มือถือของญี่ปุ่นว่า "BELL" ซึ่งขัดแย้งกับ
อุตสาหกรรมที่ใช้มาอย่างยาวนาน (และคำแนะนำของ Unicode ให้ใช้) นั้นหมายถึง
อักขระควบคุม ASCII ที่ U+0007 ดังนั้น ชื่อนั้นจึงถูกเลิกใช้ในภาษา Perl
ตั้งแต่ v5.14 และการใช้งานใด ๆ จะทำให้เกิดข้อความเตือน (เว้นแต่จะปิด) ชื่อ
ตอนนี้ "ALERT" เป็นชื่อที่ต้องการสำหรับจุดโค้ดนี้ โดย "BEL" เป็นชื่อย่อที่ยอมรับได้
รูปร่าง. ชื่อของอักขระโทรศัพท์มือถือใหม่ที่จุดรหัส U+1F514 ยังไม่กำหนด
ใน Perl เวอร์ชันนี้ (ดังนั้นเราจึงไม่ได้ใช้ Unicode 6.1 ทั้งหมด) แต่เริ่มต้น
ใน v5.18 BELL จะหมายถึงตัวละครนี้ ไม่ใช่ U+0007

Unicode ได้ดำเนินการเพื่อให้แน่ใจว่าข้อผิดพลาดประเภทนี้จะไม่เกิดขึ้นอีก ดิ
มาตรฐานตอนนี้มีชื่อและคำย่อที่เป็นที่ยอมรับโดยทั่วไปสำหรับการควบคุม
อักขระในขณะที่ก่อนหน้านี้ไม่มี (แม้ว่าจะมีชื่อที่แนะนำสำหรับ .ส่วนใหญ่
ซึ่ง Perl ใช้) ซึ่งหมายความว่าชื่อที่แนะนำส่วนใหญ่อยู่ในขณะนี้
อย่างเป็นทางการในมาตรฐาน Unicode ไม่แนะนำชื่อสำหรับรหัสสี่จุด
ระบุไว้ข้างต้นระหว่าง U+008E และ U+008F และในการกำหนดมาตรฐานให้ Unicode เปลี่ยนแปลงอย่างละเอียด
ชื่อที่ Perl ให้ไว้ก่อนหน้านี้โดยแทนที่ช่องว่างสุดท้ายในแต่ละชื่อ
โดยยัติภังค์ Unicode ยังยอมรับชื่ออย่างเป็นทางการที่ Perl เลิกใช้แล้ว เช่น FILE
เครื่องแยก ตอนนี้มีชื่อเดียวที่เลิกใช้แล้วคือ BELL ในที่สุด Perl ก็ใช้ทางการใหม่
ชื่อแทนชื่อเก่า (ปัจจุบันถือว่าล้าสมัย) สำหรับรหัสสี่จุดแรกใน
รายการด้านบน (รายการที่มีวงเล็บอยู่ในนั้น)

เมื่อใส่ชื่อไว้ในมาตรฐาน Unicode แล้ว การเปลี่ยนแปลงประเภทนี้ควร
จะไม่เกิดขึ้นอีก แม้ว่าการแก้ไข เช่น U+2118 จะยังทำได้

Unicode ยังเพิ่มตัวย่อชื่อซึ่งตอนนี้ Perl ยอมรับ: SP สำหรับ SPACE; TAB สำหรับ
ตารางตัวละคร; NEW LINE, END OF LINE, NL และ EOL สำหรับ LINE FEED; ล็อค-SHIFT ONE
สำหรับ SHIFT OUT; LOCKING-SHIFT ZERO สำหรับ SHIFT IN; และ ZWNBSP สำหรับ ZERO WIDTH NO-BREAK SPACE

รายละเอียดเพิ่มเติมเกี่ยวกับ Unicode เวอร์ชันนี้มีอยู่ใน
<http://www.unicode.org/versions/Unicode6.1.0/>.

"ใช้ ฉายา" is ไม่ อีกต่อไป จำเป็น สำหรับ "\N{ชื่อ}"

เมื่อ "\N{ชื่อ}" พบโมดูล "charnames" จะถูกโหลดโดยอัตโนมัติเมื่อ
จำเป็นราวกับว่ามีการระบุตัวเลือก ":full" และ ":short" ดู charnames สำหรับ more
ข้อมูล

"\N{...}" สามารถ ตอนนี้ มี Unicode หลวม พร้อมชื่อ การจับคู่

มีการอธิบายไว้ในรายการ "charnames" ใน "Updated Modules and Pragmata" ด้านล่าง

Unicode สัญลักษณ์ ชื่อ

ขณะนี้ Perl รองรับ Unicode อย่างเหมาะสมในชื่อสัญลักษณ์ เคยเป็น "*{$foo}"
จะละเว้นแฟล็ก UTF8 ภายในและใช้ไบต์ของการเป็นตัวแทนพื้นฐานไปยัง
เงยหน้าขึ้นมองสัญลักษณ์ นั่นหมายความว่า "*{"\x{100}"}" และ "*{"\xc4\x80"}" จะคืนค่า
สิ่งเดียวกัน ทุกส่วนของ Perl เหล่านี้ได้รับการแก้ไขเพื่อบัญชีสำหรับ Unicode:

· ชื่อเมธอด (รวมถึงชื่อที่ส่งไปยัง "use overload")

· ชื่อ Typeglob (รวมถึงชื่อของตัวแปร รูทีนย่อย และการจัดการไฟล์)

· ชื่อแพ็คเกจ

· "ไปที่"

·สัญลักษณ์ dereference

· อาร์กิวเมนต์ที่สองของ "bless()" และ "tie()"

· ส่งกลับค่าของ "ref()"

· ต้นแบบรูทีนย่อย

· คุณลักษณะ

· คำเตือนและข้อความแสดงข้อผิดพลาดต่างๆ ที่กล่าวถึงชื่อตัวแปรหรือค่า วิธีการ
เป็นต้น

นอกจากนี้ แก้ไขข้อผิดพลาดในการแยกวิเคราะห์ที่ป้องกันไม่ให้ "*{e}" อ้างอิงโดยปริยาย
ชื่อ แต่ตีความว่าเป็น "*{+e}" แทน ซึ่งจะทำให้เกิดการละเมิดอย่างเข้มงวด

"*{"*a::b"}" จะตัด * ออกโดยอัตโนมัติ หากตามด้วยตัวอักษร ASCII ที่
ขยายไปยังอักขระตัวระบุ Unicode ทั้งหมดแล้ว

ตัวแปรที่ไม่ใช่เครื่องหมายวรรคตอนที่ไม่ใช่ ASCII หนึ่งอักขระ (เช่น "$e") อยู่ภายใต้ "ใช้แล้ว
เพียงครั้งเดียว" คำเตือนเคยได้รับการยกเว้นเพราะถือว่าเป็นเครื่องหมายวรรคตอน
ตัวแปร

นอกจากนี้ยังรองรับตัวแปรเครื่องหมายวรรคตอน Unicode แบบตัวเดียว (เช่น $X) [perl
#69032].

ปรับตัวดีขึ้น ความสามารถ ไปยัง ผสม ในประเทศ และ ยูนิโค้ด รวมทั้ง UTF-8 ในประเทศ

เพิ่มพารามิเตอร์ทางเลือกใน "ใช้สถานที่"

ใช้สถานที่ ':not_characters';

ซึ่งบอกให้ Perl ใช้ทั้งหมดยกเว้นส่วน "LC_CTYPE" และ "LC_COLLATE" ของปัจจุบัน
สถานที่ ชุดอักขระจะถือว่าเป็น Unicode แทน ซึ่งช่วยให้สถานที่และ
Unicode สามารถผสมกันได้อย่างลงตัว รวมถึงโลแคล UTF-8 ที่มีความถี่เพิ่มขึ้นเรื่อยๆ เมื่อไหร่
การใช้รูปแบบโลแคลรูปแบบไฮบริดนี้ เลเยอร์ ":locale" กับ openpragma สามารถใช้เพื่อ
ส่วนต่อประสานกับระบบไฟล์และมีโมดูล CPAN สำหรับ ARGV และ
การแปลงตัวแปรสภาพแวดล้อม

รายละเอียดทั้งหมดอยู่ใน perllocale

ใหม่ ฟังก์ชัน "เอฟซี" และ ตรงกัน หลบหนี ลำดับ "\F" สำหรับ Unicode พับ

Unicode foldcase เป็นส่วนขยายของตัวพิมพ์เล็กที่ให้ผลลัพธ์ที่ดีกว่าเมื่อเปรียบเทียบ two
สตริงไม่คำนึงถึงขนาดตัวพิมพ์ มีการใช้ภายในมานานแล้วในนิพจน์ทั่วไป "/i"
การจับคู่ ตอนนี้สามารถใช้ได้อย่างชัดเจนผ่านการเรียกใช้ฟังก์ชัน "fc" ใหม่ (เปิดใช้งานโดย
"ใช้คุณสมบัติ 'fc'" หรือ "use v5.16" หรือเรียกได้อย่างชัดเจนผ่าน "CORE::fc") หรือผ่านทาง
ลำดับ "\F" ใหม่ในสตริงเครื่องหมายอัญประกาศ

รายละเอียดทั้งหมดอยู่ใน "fc" ใน perlfunc

การขอ Unicode "สคริปต์_ส่วนขยาย" คุณสมบัติ is ตอนนี้ ได้รับการสนับสนุน.

ใหม่ใน Unicode 6.0 นี่คือคุณสมบัติ "สคริปต์" ที่ได้รับการปรับปรุง รายละเอียดอยู่ใน "สคริป" ใน
เพอร์ลูนิโคด

XS การเปลี่ยนแปลง
ปรับตัวดีขึ้น แบบแผน สำหรับ เรื่อง ในตัว ประเภท

ผู้เขียน XS ส่วนใหญ่จะรู้ว่ามีข้อบกพร่องมาเป็นเวลานานในแผนผังรูปแบบ OUTPUT สำหรับ T_AVREF
("AV*"), T_HVREF ("HV*"), T_CVREF ("CV*") และ T_SVREF ("SVREF" หรือ "\$foo") ที่ต้องการ
ลดจำนวนการอ้างอิงของค่าตอบแทนด้วยตนเองแทน typemap
ดูแลเรื่องนี้ สำหรับความเข้ากันได้ย้อนหลัง ค่านี้ไม่สามารถเปลี่ยนแปลงได้ในค่าเริ่มต้น
แผนผังพิมพ์ แต่ตอนนี้ เรามี typemap เพิ่มเติม "T_AVREF_REFCOUNT_FIXED" และอื่นๆ ที่ทำได้
ไม่แสดงข้อผิดพลาดนี้ การใช้พวกมันในส่วนขยายของคุณนั้นง่ายเพียงแค่มีหนึ่งบรรทัดใน
ส่วน "TYPEMAP" ของคุณ:

HV* T_HVREF_REFCOUNT_FIXED

"is_utf8_char()"

ฟังก์ชัน XS-callable "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()", เป็นต้น

ฟังก์ชัน XS-callable อื่นๆ ส่วนใหญ่ที่รับอินพุตที่เข้ารหัส UTF-8 สันนิษฐานโดยปริยายว่า
UTF-8 ถูกต้อง (ไม่ผิดรูปแบบ) เมื่อเทียบกับความยาวบัฟเฟอร์ อย่าทำสิ่งต่าง ๆ เช่น
เปลี่ยนตัวพิมพ์เล็กและใหญ่หรือดูว่าเป็นตัวอักษรและตัวเลขหรือไม่โดยไม่ได้ตรวจสอบให้แน่ใจก่อนว่าเป็น
UTF-8 ที่ถูกต้อง สามารถทำได้อย่างปลอดภัยสำหรับทั้งสตริงโดยใช้หนึ่งในฟังก์ชัน
"is_utf8_string()", "is_utf8_string_loc()" และ "is_utf8_string_loclen()"

ใหม่ เบาะ API

มีการเพิ่มฟังก์ชันใหม่จำนวนมากใน API สำหรับจัดการแผ่นคำศัพท์ ดู "Pad
โครงสร้างข้อมูล" ใน Perlapi สำหรับข้อมูลเพิ่มเติม

การเปลี่ยนแปลง ไปยัง พิเศษ ตัวแปร
$$ สามารถ be ที่ได้รับมอบหมาย ไปยัง

$$ เป็นแบบอ่านอย่างเดียวใน Perl 5.8.0 แต่บางครั้งเท่านั้น: "local $$" จะทำให้ได้
เขียนได้อีก โมดูล CPAN บางตัวใช้ "local $$" หรือโค้ด XS เพื่อเลี่ยงการอ่าน-
ตรวจสอบเท่านั้น ดังนั้นจึงไม่มีเหตุผลที่จะให้ $$ เป็นแบบอ่านอย่างเดียว (การเปลี่ยนแปลงนี้ยังทำให้เกิดข้อผิดพลาด
ที่จะได้รับการแก้ไขในขณะที่ยังคงความเข้ากันได้ย้อนหลัง)

$^เอ็กซ์ แปลง ไปยัง an แน่นอน เส้นทาง on ฟรีบีเอสดี, OS X และ Solaris

$^X ถูกแปลงเป็นเส้นทางที่แน่นอนบน OS X, FreeBSD (โดยไม่จำเป็นต้องใช้ / proc ติดตั้ง)
และ Solaris 10 และ 11 สิ่งนี้ช่วยเสริมแนวทางก่อนหน้าของการใช้ / proc บนลินุกซ์
FreeBSD และ NetBSD (ในทุกกรณี เมื่อติดตั้ง)

สิ่งนี้ทำให้การติดตั้ง Perl แบบย้ายได้มีประโยชน์มากขึ้นบนแพลตฟอร์มเหล่านี้ (ดู
"ย้ายที่อยู่ @INC" ใน ติดตั้ง)

Debugger การเปลี่ยนแปลง
คุณสมบัติ ภายใน ดีบัก

บันเดิลคุณสมบัติของ Perl ปัจจุบันเปิดใช้งานสำหรับคำสั่งที่ป้อนในการโต้ตอบ
ดีบักเกอร์

ใหม่ ตัวเลือก สำหรับ ดีบักเกอร์ t คำสั่ง

การขอ t คำสั่งในดีบักเกอร์ซึ่งสลับโหมดการติดตาม ตอนนี้ยอมรับอาร์กิวเมนต์ตัวเลข
ที่กำหนดจำนวนระดับของการเรียกรูทีนย่อยเพื่อติดตาม

"เปิดใช้งาน" และ "ปิดการใช้งาน"

ดีบักเกอร์ตอนนี้มีคำสั่ง "ปิดการใช้งาน" และ "เปิดใช้งาน" สำหรับการปิดใช้งานจุดสั่งหยุดที่มีอยู่
และเปิดใช้งานอีกครั้ง ดู perldebug

จุดพัก สีสดสวย ไฟล์ ชื่อ

คำสั่ง "b" ของดีบักเกอร์สำหรับการตั้งค่าเบรกพอยต์ช่วยให้นำหน้าหมายเลขบรรทัดด้วย
ชื่อไฟล์ ดู "b [file]:[line] [condition]" ใน perldebug

การขอ "คอร์" namespace
การขอ "คอร์::" อุปสรรค

คำนำหน้า "CORE::" สามารถใช้กับคำหลักที่เปิดใช้งานโดย feature.pm แม้ภายนอก
ขอบเขตของ "คุณสมบัติการใช้งาน"

รูทีนย่อย in "คอร์" namespace

คีย์เวิร์ด Perl จำนวนมากพร้อมใช้งานเป็นรูทีนย่อยในเนมสเปซ CORE นี้จะช่วยให้พวกเขา
เป็นนามแฝง:

BEGIN { *entangle = \&CORE::tie }
พัวพัน $variable, $package, @args;

และสำหรับต้นแบบที่จะข้าม:

ย่อย mytie(\[%$*@]$@) {
ของฉัน ($ref, $pack, @args) = @_;
... ทำอะไรสักอย่าง ...
ไปที่ &CORE::tie;
}

สิ่งเหล่านี้ไม่สามารถเรียกผ่านการอ้างอิงหรือผ่านไวยากรณ์ &foo ได้ แต่จะต้องถูกเรียก
เป็นคำพูดเปล่า

ดู CORE สำหรับรายละเอียด

อื่นๆ การเปลี่ยนแปลง
ไม่ระบุชื่อ จับ

ตัวจัดการไฟล์ที่สร้างขึ้นโดยอัตโนมัติตอนนี้มีชื่อว่า __ANONIO__ เมื่อชื่อตัวแปร
ไม่สามารถระบุได้ มากกว่า $__ANONIO__

โหลดอัตโนมัติ ประเภท รูทีนย่อย

รูทีนย่อยการเรียงลำดับแบบกำหนดเองสามารถโหลดอัตโนมัติได้แล้ว [perl #30661]:

อัตโนมัติย่อย { ... }
@sorted = เรียงลำดับ foo @list; # ใช้ AUTOLOAD

"ดำเนินต่อ" ไม่ อีกต่อไป ต้อง "สลับกัน" ลักษณะ

คำหลัก "ต่อไป" มีความหมายสองประการ มันสามารถแนะนำบล็อก "ต่อไป" หลังจาก a
วนซ้ำหรือสามารถออกจากบล็อก "เมื่อ" ปัจจุบันได้ ถึงตอนนี้ความหมายหลังถูกต้อง
เฉพาะเมื่อเปิดใช้งานคุณลักษณะ "สวิตช์" และเกิดข้อผิดพลาดทางไวยากรณ์ ตั้งแต่หลัก
จุดประสงค์ของ feature.pm คือเพื่อหลีกเลี่ยงความขัดแย้งกับรูทีนย่อยที่ผู้ใช้กำหนด ไม่มี
เหตุผลที่ต้อง "ทำต่อ" ต่อไป

DTrace ยานสำรวจ สำหรับ ล่าม ระยะ เปลี่ยนแปลง

โพรบ "เปลี่ยนเฟส" จะเริ่มทำงานเมื่อเฟสของล่ามเปลี่ยนแปลง ซึ่งจะติดตาม
ตัวแปร "${^GLOBAL_PHASE}" "arg0" เป็นชื่อเฟสใหม่ "arg1" เป็นตัวเก่า นี้
มีประโยชน์สำหรับการจำกัดเครื่องมือของคุณให้เหลืออย่างน้อย: เวลาคอมไพล์ เวลารัน หรือ
ทำลายเวลา

"__ไฟล์__()" วากยสัมพันธ์

โทเค็น "__FILE__", "__LINE__" และ "__PACKAGE__" สามารถเขียนด้วยคู่เปล่าได้แล้ว
ของวงเล็บตามหลัง ทำให้แยกวิเคราะห์แบบเดียวกับ "เวลา" "ทางแยก" และอื่นๆ
ฟังก์ชั่นในตัว

การขอ "\$" ต้นแบบ ยอมรับ ใด เกลา ค่า

ต้นแบบรูทีนย่อย "\$" และ "\[$]" ตอนนี้ยอมรับอาร์กิวเมนต์ lvalue สเกลาร์
ก่อนหน้านี้พวกเขายอมรับเฉพาะสเกลาร์ที่ขึ้นต้นด้วย "$" และองค์ประกอบแฮชและอาร์เรย์
การเปลี่ยนแปลงนี้ทำให้สอดคล้องกับวิธีการ "อ่าน" และ "recv" ในตัว
(และอื่น ๆ ) แยกวิเคราะห์ข้อโต้แย้งของพวกเขา ซึ่งหมายความว่าสามารถแทนที่ built-in
ทำงานด้วยรูทีนย่อยแบบกำหนดเองที่แยกวิเคราะห์อาร์กิวเมนต์ในลักษณะเดียวกัน

"_" in รูทีนย่อย ต้นแบบ

อนุญาตให้ใช้อักขระ "_" ในต้นแบบรูทีนย่อยก่อน "@" หรือ "%"

⁠ความปลอดภัย


ใช้ "is_utf8_char_buf()" และ ไม่ "is_utf8_char()"
ฟังก์ชันหลังเลิกใช้แล้วเนื่องจาก API นั้นไม่เพียงพอที่จะรับประกันได้ว่า
ไม่อ่าน (สูงสุด 12 ไบต์ในกรณีที่เลวร้ายที่สุด) เกินจุดสิ้นสุดของสตริงอินพุต ดู
is_utf8_char_buf().

ผิดรูปแบบ UTF-8 อินพุต ได้ สาเหตุ ความพยายามในการ ไปยัง อ่าน เกิน ปลาย of กันชน
ฟังก์ชัน XS-accessible ใหม่ 8 ฟังก์ชัน ได้แก่ "utf8_to_uvchr_buf()" และ "utfXNUMX_to_uvuni_buf()"
เพื่อป้องกันสิ่งนี้ และ Perl core ได้ถูกแปลงไปใช้แล้ว ดู
"การเปลี่ยนแปลงภายใน".

"ไฟล์::Glob::bsd_glob()" หน่วยความจำ ความผิดพลาด สีสดสวย GLOB_ALTDIRFUNC (CVE-2011-2728)
การเรียก "File::Glob::bsd_glob" ด้วยแฟล็กที่ไม่รองรับ GLOB_ALTDIRFUNC จะทำให้
การละเมิดการเข้าถึง / segfault โปรแกรม Perl ที่ยอมรับค่าแฟล็กจากภายนอก
แหล่งที่มาอาจเปิดเผยตัวเองต่อการปฏิเสธบริการหรือการโจมตีด้วยการใช้รหัสโดยอำเภอใจ
ไม่มีการหาประโยชน์ที่รู้จักในป่า ปัญหาได้รับการแก้ไขอย่างชัดแจ้ง
ปิดใช้งานแฟล็กที่ไม่รองรับทั้งหมดและตั้งค่าพอยน์เตอร์ของฟังก์ชันที่ไม่ได้ใช้เป็น null บัก
รายงานโดย Clement Lecigne (5.14.2)

สิทธิประโยชน์ เป็น ตอนนี้ เซ็ต ได้อย่างถูกต้อง เมื่อ มอบหมาย ไปยัง $(
ข้อผิดพลาดที่สมมติขึ้น (ในทางปฏิบัติอาจใช้ไม่ได้จริง) เนื่องจากการตั้งค่าที่ไม่ถูกต้องของ
ID กลุ่มที่มีประสิทธิภาพขณะตั้งค่า $( ได้รับการแก้ไขแล้ว บั๊กจะได้รับผลกระทบเท่านั้น
ระบบที่มี "setresgid()" แต่ไม่มี "setregid()" แต่ไม่รู้จักระบบดังกล่าว
มีอยู่

การเลิกใช้


อย่า อ่าน Unicode ข้อมูล ฐาน ไฟล์ in lib/ยูนิคอร์
ขณะนี้เลิกใช้แล้วเพื่ออ่านไฟล์ฐานข้อมูล Unicode โดยตรง สิ่งเหล่านี้ถูกเก็บไว้ใน
lib/ยูนิคอร์ ไดเร็กทอรี คุณควรใช้ฟังก์ชันใหม่ใน 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 เพื่ออธิบายกรณีการใช้งานของคุณและ
แจ้งขั้นตอนการเลิกใช้งาน

แกน โมดูล
โมดูลเหล่านี้อาจถูกทำเครื่องหมายว่าเลิกใช้แล้ว จาก แกน. นี่หมายความว่าพวกเขาจะ
ไม่มีการติดตั้งตามค่าเริ่มต้นกับการกระจายหลักอีกต่อไป แต่จะยังคงใช้งานได้บน
ซีพีเอ็น.

· ซีแพนพลัส

· ตัวกรอง::ง่าย

· PerlIO::mmap

· พ็อด::LaTeX

· Pod::พาร์เซอร์

· SelfLoader

· ข้อความ::Soundex

· กระทู้.น

แพลตฟอร์ม สีสดสวย ไม่ ที่สนับสนุน โปรแกรมเมอร์
แพลตฟอร์มเหล่านี้อาจจะลบการรองรับบิลด์พิเศษออกในช่วง 5.17.0
ชุดพัฒนา

· บีโอเอส

· ดีเจพีพี

· ดีกุกซ์

· สนพ

· MPE/iX

· แรปโซดี

· ยูทีเอส

· VM/อีเอสเอ

อื่นๆ อนาคต การเลิกใช้
· การสลับระหว่าง $< และ $>

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเลิกใช้งานในอนาคต โปรดดูตั๋ว RT ที่เกี่ยวข้อง
.

· sfio, สตูดิโอ

Perl รองรับการสร้างโดยไม่มี PerlIO ที่เหมาะสม โดยใช้ stdio หรือ sfio wrapper
แทนที่. บิลด์ Perl แบบนี้จะไม่รองรับเลเยอร์ IO และด้วยเหตุนี้ Unicode IO
ทำให้ค่อนข้างพิการ

PerlIO รองรับเลเยอร์ "stdio" หากต้องการใช้ stdio และในทำนองเดียวกัน sfio layer
สามารถผลิตได้

· ตัวอักษรไม่มีอักขระหลีก "{" ในนิพจน์ทั่วไป

เริ่มต้นด้วย v5.20 มีการวางแผนที่จะกำหนดให้ใช้อักขระหลีก "{" เช่น
โดยนำหน้าด้วยแบ็กสแลช ใน v5.18 ข้อความเตือนที่เลิกใช้แล้วจะเป็น
ปล่อยออกมาสำหรับการใช้งานดังกล่าวทั้งหมด มีผลเฉพาะรูปแบบที่ตรงกับตัวอักษร
"{". การใช้อักขระนี้ในลักษณะอื่น เช่น ส่วนหนึ่งของตัวระบุหรือลำดับเป็นin
ด้านล่างไม่ได้รับผลกระทบอย่างสมบูรณ์:

/ฟู{3,5}/
/\p{ตัวอักษร}/
/\N{ศูนย์หลัก}

การลบสิ่งนี้จะอนุญาตให้ส่วนขยายของไวยากรณ์รูปแบบของ Perl และข้อผิดพลาดดีขึ้น
ตรวจสอบไวยากรณ์ที่มีอยู่ ดู "ปริมาณ" ใน perlre สำหรับตัวอย่าง

· ปรับปรุงความหมาย "\Q" ในสตริงเครื่องหมายอัญประกาศคู่เมื่อรวมกับ Escape อื่นๆ

มีข้อบกพร่องและความไม่สอดคล้องกันหลายประการที่เกี่ยวข้องกับการรวมกันของ "\Q" และ Escape
เช่น "\x", "\L" เป็นต้น ภายในคู่ "\Q...\E" สิ่งเหล่านี้จำเป็นต้องได้รับการแก้ไขและทำเช่นนั้น
จะต้องเปลี่ยนพฤติกรรมปัจจุบัน การเปลี่ยนแปลงยังไม่ได้รับการตัดสิน

เข้ากันไม่ได้ การเปลี่ยนแปลง


พิเศษ บล็อก ที่เรียกว่า in ถือเป็นโมฆะ สิ่งแวดล้อม
บล็อกพิเศษ ("BEGIN", "CHECK", "INIT", "UNITCHECK", "END") จะถูกเรียกเป็นโมฆะ
บริบท. สิ่งนี้จะหลีกเลี่ยงการคัดลอกผลลัพธ์ของคำสั่งสุดท้ายอย่างสิ้นเปลือง [perl #108794]

การขอ "โอเวอร์โหลด" Pragma และ regexp วัตถุ
ด้วย "ไม่มีการโอเวอร์โหลด" วัตถุนิพจน์ทั่วไปที่ส่งคืนโดย "qr//" จะถูกทำให้เป็นสตริง
เป็น "Regexp=REGEXP(0xbe600d)" แทนที่จะเป็นนิพจน์ทั่วไป [perl #108780]

สอง XS แบบแผน รายการ ลบออก
รายการไทป์แมป XS ที่น่าจะไม่ได้ใช้สองรายการได้ถูกลบออกจากแผนผังหลักแล้ว:
T_DATAUNIT และ T_CALLBACK หากคุณเป็นผู้ใช้เหล่านี้ โปรดดูที่
คำแนะนำเกี่ยวกับวิธีการกู้คืนใน perlxstypemap

Unicode 6.1 มี เข้ากันไม่ได้ สีสดสวย Unicode 6.0
มีรายละเอียดอยู่ใน "รองรับ (เกือบ) Unicode 6.1" ด้านบน คุณสามารถรวบรวมเวอร์ชันนี้
ของ Perl เพื่อใช้ Unicode 6.0 ดู "การแฮ็ก Perl เพื่อทำงานบน Unicode เวอร์ชันก่อนหน้า (สำหรับ
เฉพาะแฮกเกอร์ที่ร้ายแรงเท่านั้น)" ใน perlunicode

บอร์แลนด์ ผู้รวบรวม
การสนับสนุนคอมไพเลอร์ Borland ทั้งหมดถูกยกเลิก รหัสใช้งานไม่ได้นาน
เวลาอยู่แล้ว

บาง เลิก Unicode คุณสมบัติ เป็น ไม่ อีกต่อไป ได้รับการสนับสนุน by ผิดนัด
Perl ไม่ควรเปิดเผยคุณสมบัติ Unicode บางอย่างที่ใช้โดย Unicode
เป็นการภายในและไม่ควรเปิดเผยต่อสาธารณะ การใช้สิ่งเหล่านี้ทำให้เกิดการเลิกใช้งาน
ข้อความเตือนตั้งแต่ Perl 5.12 คุณสมบัติที่ถูกลบคือ Other_Alphabetic
Other_Default_Ignorable_Code_Point, Other_Grapheme_Extend, อื่นๆ_ID_Continue,
Other_ID_Start, Other_Lowercase, Other_Math และ Other_Uppercase

Perl อาจถูกคอมไพล์ใหม่เพื่อรวมบางส่วนหรือทั้งหมด คำแนะนำจะได้รับใน "Unicode
คุณสมบัติอักขระที่ Perl ไม่ยอมรับ" ใน perluniprops

การอ้างอิง IO สิ่งของ as พิมพ์ลูกโลก
ตัวดำเนินการ "*{...}" เมื่อส่งผ่านการอ้างอิงถึงสิ่งที่ IO (เช่นใน "*{*STDIN{IO}}")
สร้าง typeglob ใหม่ที่มีเพียงวัตถุ IO นั้น ก่อนหน้านี้ จะทำให้รัดกุมเป็น
เป็นสตริงว่าง แต่โอเปอเรเตอร์บางตัวจะถือว่าไม่มีการกำหนด ทำให้เกิด
คำเตือน "ไม่ได้เตรียมใช้งาน" ตอนนี้มันทำให้สตริงเป็น __ANONIO__ [perl #96326]

ที่ผู้ใช้กำหนด กรณีเปลี่ยน ของสายการผลิต
คุณลักษณะนี้เลิกใช้แล้วใน 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 เป็น ตอนนี้ 'คงที่'
ฟังก์ชัน XSUB C ตอนนี้ 'คงที่' นั่นคือไม่สามารถมองเห็นได้จากภายนอก
หน่วยรวบรวม ผู้ใช้สามารถใช้ "XS_EXTERNAL(name)" และ "XS_INTERNAL(name)" ใหม่ได้
มาโครเพื่อเลือกลักษณะการเชื่อมโยงที่ต้องการ ประกาศ "XS (ชื่อ)" ธรรมดาสำหรับ
XSUB จะยังคงประกาศ XSUB ที่ไม่ใช่ 'คงที่' เพื่อความเข้ากันได้ แต่คอมไพเลอร์ XS
ExtUtils::ParseXS ("xsubpp") จะปล่อย XSUB แบบ "คงที่" ตามค่าเริ่มต้น ExtUtils::ParseXS's
พฤติกรรมสามารถกำหนดค่าใหม่จาก XS โดยใช้คำหลัก "EXPORT_XSUB_SYMBOLS" ดู perlxs
เพื่อดูรายละเอียด

การทำให้อ่อนลง อ่านอย่างเดียว การอ้างอิง
ไม่อนุญาตให้ลดการอ้างอิงแบบอ่านอย่างเดียวอีกต่อไป มันไม่น่าจะได้ผล
อย่างไรก็ตาม และบางครั้งอาจส่งผลให้เกิดการขัดข้องได้

การคาด สเกลาร์ ที่ ถือ พิมพ์ลูกโลก
ความพยายามที่จะผูกสเกลาร์หลังจากที่ได้รับมอบหมาย typeglob ให้ผูก . แทน
จัดการในสล็อต IO ของ typeglob นี่หมายความว่าเป็นไปไม่ได้ที่จะผูกสเกลาร์
ตัวเอง. ปัญหาที่คล้ายกันส่งผลกระทบต่อ "tied" และ "untie": "tied $scalar" จะคืนค่า false
บนสเกลาร์ที่ผูกไว้ถ้าสิ่งสุดท้ายที่ส่งคืนคือ typeglob และ "untie $scalar" บน a
สเกลาร์ที่ผูกไว้จะไม่ทำอะไรเลย

เราแก้ไขปัญหานี้ก่อน Perl 5.14.0 แต่เกิดปัญหากับโมดูล CPAN บางตัว
ดังนั้นเราจึงใส่วงจรการเลิกใช้แทน

ตอนนี้การเลิกใช้งานได้ถูกลบออกและจุดบกพร่องนี้ได้รับการแก้ไขแล้ว ดังนั้น "tie $scalar" จะ
ผูกสเกลาร์เสมอ ไม่ใช่จับที่จับ ในการผูกที่จับ ให้ใช้ "tie *$scalar"
(มีเครื่องหมายดอกจันชัดเจน) เช่นเดียวกับ "tied *$scalar" และ "untie *$scalar" เช่นเดียวกับ

ไอพีซี::Open3 ไม่ อีกต่อไป ให้ "xfork()", "xclose_on_exec()" และ "xpipe_anon()"
ฟังก์ชันทั้งสามเป็นแบบส่วนตัว ไม่มีเอกสาร และไม่ได้ส่งออก พวกเขาดูเหมือนจะไม่
ใช้โดยรหัสใด ๆ บน CPAN มีการแทรกสองรายการและหนึ่งรายการถูกลบทั้งหมด

$$ ไม่ อีกต่อไป แคช PID
สมัยก่อนถ้าใครเรียกว่า ส้อม(3) จาก C ความคิดของ Perl เกี่ยวกับ $$ อาจไม่สอดคล้องกับ
อะไร เก็ทพิด() ผลตอบแทน โดยดึงค่าของ $$ via . เสมอ เก็ทพิด(), ศักยภาพนี้
ข้อผิดพลาดจะถูกกำจัด รหัสที่ขึ้นอยู่กับพฤติกรรมการแคชจะใช้งานไม่ได้ ตามที่อธิบายไว้ใน
Core Enhancement $$ สามารถเขียนได้ในขณะนี้ แต่จะถูกรีเซ็ตในระหว่างการแยก

$$ และ "getppid()" ไม่ อีกต่อไป เลียนแบบ POSIX อรรถศาสตร์ ภายใต้ เธรดลินุกซ์
การจำลอง POSIX ของ $$ และ "getppid()" ภายใต้การนำ LinuxThreads ที่ล้าสมัยไปใช้
ถูกลบออก สิ่งนี้ส่งผลกระทบต่อผู้ใช้ Linux 2.4 และผู้ใช้ Debian GNU/kFreeBSD . เท่านั้น
มากถึงและรวมถึง 6.0 ไม่ใช่การติดตั้ง Linux ส่วนใหญ่ที่ใช้NPTL
หัวข้อ

ซึ่งหมายความว่า "getppid()" เช่น $$ ได้รับการรับประกันว่าจะส่งคืนแนวคิดของระบบปฏิบัติการ . เสมอ
สถานะปัจจุบันของกระบวนการ ไม่ใช่เวอร์ชันแคชของ Perl

ดูเอกสารประกอบสำหรับ $$ สำหรับรายละเอียด

$<, $>, $( และ $) เป็น ไม่ อีกต่อไป เก็บไว้ชั่วคราว
ในทำนองเดียวกันกับการเปลี่ยนแปลงของ $$ และ "getppid()" การแคชภายในของ $<, $>, $( และ $)
ถูกลบแล้ว

เมื่อเราแคชค่าเหล่านี้ ความคิดของเราเกี่ยวกับสิ่งที่พวกเขาจะไม่ซิงค์กับ
ความเป็นจริงถ้ามีคน (เช่น มีคนฝัง Perl) เรียกว่า "sete?[ug]id()" โดยไม่ต้องอัปเดต
"PL_e?[ug]id". การต้องรับมือกับความซับซ้อนนี้ไม่คุ้มเลยเพราะว่า .ราคาถูกแค่ไหน
"gete?[ug]id()" การเรียกระบบคือ

การเปลี่ยนแปลงนี้จะทำลายโมดูล CPAN จำนวนหนึ่งที่ใช้ "PL_uid" ระดับ XS, "PL_gid",
ตัวแปร "PL_euid" หรือ "PL_egid"

การแก้ไขข้อบกพร่องเหล่านั้นคือการใช้ "PerlProc_gete?[ug]id()" เพื่อดึงข้อมูลเหล่านั้น (เช่น
"PerlProc_getuid()") และไม่ต้องกำหนดให้กับ "PL_e?[ug]id" หากคุณเปลี่ยน
UID/GID/EUID/EGID. ไม่จำเป็นต้องทำเช่นนั้นอีกต่อไปเนื่องจาก Perl จะดึงข้อมูลเสมอ
เวอร์ชันล่าสุดของค่าเหล่านั้นจากระบบปฏิบัติการ

ที่ ไม่ใช่ ASCII อักขระ ได้รับ ที่ยกมา by "โควต้า" และ "\Q" มี การเปลี่ยนแปลง
ซึ่งไม่น่าจะส่งผลให้เกิดปัญหาที่แท้จริง เนื่องจาก Perl ไม่ได้ให้ความหมายพิเศษกับ
อักขระใด ๆ ที่ไม่ใช่ ASCII ดังนั้นจึงไม่เกี่ยวข้องในขณะนี้ซึ่งมีการยกมาหรือไม่ นี้
การเปลี่ยนแปลงแก้ไขข้อผิดพลาด [perl #77654] และทำให้พฤติกรรมของ Perl สอดคล้องกับ Unicode มากขึ้น
คำแนะนำ ดู "quotemeta" ใน perlfunc

ประสิทธิภาพ การเพิ่มประสิทธิภาพ


· ปรับปรุงประสิทธิภาพสำหรับคุณสมบัติ Unicode ในนิพจน์ทั่วไป

การจับคู่จุดโค้ดกับคุณสมบัติ Unicode ทำได้ผ่านการค้นหาแบบไบนารี
แทนที่จะเป็นเส้นตรง ซึ่งหมายความว่าตัวอย่างเช่นกรณีที่แย่ที่สุดสำหรับสินค้า 1000 รายการ
คุณสมบัติคือ 10 โพรบแทนที่จะเป็น 1000 ความไร้ประสิทธิภาพนี้ได้รับการชดเชยใน
อดีตโดยการจัดเก็บผลลัพธ์ของโพรบที่ให้มาบวกกับ .ในแฮชอย่างถาวร
ผลลัพธ์สำหรับจุดรหัสที่อยู่ติดกัน 64 จุด ภายใต้ทฤษฎีที่ว่าจุดรหัสใกล้เคียงคือ
มีแนวโน้มที่จะถูกค้นหา ใช้แฮชแยกต่างหากสำหรับการกล่าวถึง Unicode . แต่ละครั้ง
คุณสมบัติในแต่ละนิพจน์ทั่วไป ดังนั้น "qr/\p{foo}abc\p{foo}/" จะสร้างสอง
แฮช โพรบใด ๆ ในอินสแตนซ์หนึ่งจะไม่เป็นที่รู้จักสำหรับอีกอันหนึ่งและแฮช
สามารถขยายแยกกันให้มีขนาดค่อนข้างใหญ่ได้หากใช้นิพจน์ทั่วไปในหลาย ๆ ตัว
จุดรหัสที่แยกกันอย่างกว้างขวางที่แตกต่างกัน อย่างไรก็ตาม ตอนนี้มีการแชร์แฮชเพียงรายการเดียว
โดยทุกกรณีของทรัพย์สินที่กำหนด ซึ่งหมายความว่าหาก "\p{foo}" ตรงกับ
"A" ในนิพจน์ทั่วไปหนึ่งชุดในเธรด ทุกคนจะทราบผลลัพธ์ทันที
การแสดงออกตามปกติและการใช้หน่วยความจำอย่างไม่หยุดยั้งก็ช้าลง
อย่างมาก

· การประกาศเวอร์ชันด้วยคีย์เวิร์ด "use" (เช่น "use 5.012") เร็วขึ้น เช่น
พวกเขาเปิดใช้งานคุณสมบัติโดยไม่ต้องโหลด คุณสมบัติ.pm.

· "local $_" เร็วขึ้น เนื่องจากไม่มีการวนซ้ำผ่านเวทย์มนตร์ที่ไม่เกิดขึ้นอีกต่อไป
เพื่อคัดลอกต่อไป

· Perl 5.12.0 เร่งการทำลายวัตถุที่คลาสกำหนด "DESTROY" ว่าง
วิธีการ (เพื่อป้องกันการโหลดอัตโนมัติ) โดยเพียงแค่ไม่เรียกวิธีการที่ว่างเปล่าดังกล่าว นี้
รีลีสทำให้การเพิ่มประสิทธิภาพนี้ก้าวไปอีกขั้น โดยไม่เรียกเมธอด "DESTROY" ใดๆ
ที่ขึ้นต้นด้วยคำสั่ง "กลับ" สิ่งนี้มีประโยชน์สำหรับผู้ทำลายล้างที่
ใช้สำหรับการดีบักเท่านั้น:

ใช้ DEBUG คงที่ => 1;
ย่อย DESTROY { ส่งคืนเว้นแต่ DEBUG; ... }

การพับแบบคงที่จะลดคำสั่งแรกเป็น "return" ถ้า DEBUG ถูกตั้งค่าเป็น 0
ทำให้เกิดการเพิ่มประสิทธิภาพนี้

· การกำหนดค่าให้กับตัวแปรที่มีสเกลาร์ typeglob หรือ copy-on-write อยู่ในขณะนี้
เร็วขึ้น. ก่อนหน้านี้ typeglob จะถูกทำให้เป็นสตริงหรือสเกลาร์แบบคัดลอกเมื่อเขียน
จะถูกคัดลอกก่อนที่จะถูกปิดล้อม

· การมอบหมายให้ "substr" ในบริบทที่เป็นโมฆะขณะนี้มีความเร็วมากกว่าสองเท่าก่อนหน้านี้
แทนที่จะสร้างและส่งคืนสเกลาร์ lvalue พิเศษที่กำหนดให้กับ
"substr" แก้ไขสตริงเดิมเอง

· "substr" ไม่คำนวณค่าที่จะส่งคืนอีกต่อไปเมื่อถูกเรียกในบริบทที่เป็นโมฆะ

· เนื่องจากการเปลี่ยนแปลงใน File::Glob ฟังก์ชัน "glob" ของ Perl และ "<...>" ที่เทียบเท่ากันคือ
ตอนนี้เร็วขึ้นมาก การแยกรูปแบบออกเป็นคำถูกเขียนใหม่ในภาษา C
ส่งผลให้เร่งความเร็วได้ถึง 20% ในบางกรณี

สิ่งนี้ไม่มีผลกับ "glob" บน VMS เนื่องจากไม่ได้ใช้ File::Glob

· ตัวดำเนินการลัดวงจร "&&", "||" และ "//" เมื่อถูกล่ามโซ่ (เช่น "$a || $b
|| $c") เร็วกว่ามากในการลัดวงจร เนื่องจาก optree . ลดลง
ข้ามผ่าน

· การใช้ "s///r" ทำให้ค่าของสเกลาร์น้อยลงหนึ่งสำเนา

· การเรียกซ้ำไปยังรูทีนย่อย lvalue ในบริบทสเกลาร์ lvalue ใช้หน่วยความจำน้อยลง

โมดูล และ ในทางปฏิบัติ


เลิก โมดูล
เวอร์ชัน::ข้อกำหนด
Version::Requirements เลิกใช้แล้ว ใช้ CPAN::Meta::Requirements ซึ่งเป็น
แทนที่ดรอปอิน มันจะถูกลบออกจาก perl.git blead ใน v5.17.0

ใหม่ โมดูล และ ในทางปฏิบัติ
· arybase -- โมดูลใหม่นี้ใช้ตัวแปร $[

· เพิ่ม PerlIO::mmap 0.010 ในแกน Perl แล้ว

เลเยอร์ "mmap" PerlIO ไม่ได้ใช้งานโดย Perl อีกต่อไป แต่ถูกย้ายแล้ว
ออกสู่โมดูล PerlIO::mmap ใหม่

วันที่อัพเดท โมดูล และ ในทางปฏิบัติ
นี่เป็นเพียงภาพรวมของการอัพเดตโมดูลที่เลือก สำหรับรายการอัปเดตทั้งหมด ให้เรียกใช้:

$ corelist --diff 5.14.0 5.16.0

คุณสามารถแทนที่เวอร์ชันโปรดของคุณแทน 5.14.0 ได้เช่นกัน

· เอกสารเก่า :: Extract ได้รับการอัปเกรดจากเวอร์ชัน 0.48 เป็น 0.58

รวมการแก้ไขสำหรับ FreeBSD เพื่อใช้ "เปิดเครื่องรูด" เท่านั้นหากอยู่ใน "/ usr / local / bin",
เนื่องจาก FreeBSD 9.0 จะจัดส่งพร้อมกับ "คลายซิป" ที่จำกัดใน "/ usr / bin".

· เอกสารเก่า :: Tar ได้รับการอัปเกรดจากเวอร์ชัน 1.76 เป็น 1.82

การปรับเปลี่ยนการจัดการไฟล์ >8gb (>0777777777777 octal) และคุณสมบัติในการส่งคืน
MD5SUM ของไฟล์ในไฟล์เก็บถาวร

· ฐานได้รับการอัปเกรดจากเวอร์ชัน 2.16 เป็น 2.18 แล้ว

"base" จะไม่ตั้งค่า $VERSION ของโมดูลเป็น "-1" อีกต่อไปเมื่อโมดูลที่โหลดไม่ได้
กำหนด $VERSION การเปลี่ยนแปลงนี้เกิดขึ้นเนื่องจาก "-1" ไม่ใช่เวอร์ชันที่ถูกต้อง
หมายเลขภายใต้เกณฑ์ "หละหลวม" ใหม่ที่ใช้ภายในโดย "UNIVERSAL::VERSION" (ดู
เวอร์ชันสำหรับข้อมูลเพิ่มเติมเกี่ยวกับเกณฑ์เวอร์ชัน "หละหลวม")

"ฐาน" จะไม่ข้ามโมดูลการโหลดภายในที่โหลดไว้แล้วและแทน
อาศัย "require" เพื่อตรวจสอบ %INC แก้ไขข้อผิดพลาดเมื่อใช้ "ฐาน" กับรหัส
ที่ล้าง %INC เพื่อบังคับให้โหลดโมดูลใหม่

· ปลาคาร์พได้รับการอัปเกรดจากเวอร์ชัน 1.20 เป็น 1.26

ตอนนี้รวมข้อมูลการจัดการไฟล์ที่อ่านล่าสุดและวางจุดหลังไฟล์และบรรทัด
หมายเลข เช่นเดียวกับข้อผิดพลาดจาก "ตาย" [perl #106538]

· charnames ได้รับการอัปเดตจากเวอร์ชัน 1.18 เป็น 1.30

ขณะนี้สามารถเรียก "charnames" ด้วยตัวเลือกใหม่ ":loose" ซึ่งเหมือนกับที่มีอยู่
ตัวเลือก ":full" แต่เปิดใช้งานการจับคู่ชื่อแบบหลวมของ Unicode รายละเอียดอยู่ใน "LOOSE
MATCHES" ในชื่อตัวละคร

· B::Deparse ได้รับการอัปเกรดจากเวอร์ชัน 1.03 เป็น 1.14 สิ่งนี้แก้ไขการออกเดินทางมากมาย
จุดบกพร่อง

· CGI ได้รับการอัปเกรดจากเวอร์ชัน 3.52 เป็น 3.59

ใช้ FCGI.pm API สาธารณะและจัดทำเอกสารใน CGI::Fast CGI::Fast ใช้ an
FCGI API ที่เลิกใช้แล้วและถูกลบออกจากเอกสารประกอบเมื่อสิบกว่าปีที่แล้ว
การใช้ API ที่เลิกใช้แล้วนี้กับ FCGI >= 0.70 หรือ FCGI <= 0.73 ทำให้เกิดการรักษาความปลอดภัย
ปัญหา.
<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()" ได้ร้องขอในนามของคุณ

"PATH_INFO" ถูกละเว้นใน URL ดังกล่าวเนื่องจากปัญหาถูกนำมาใช้ใน
3.12 เปิดตัวในเดือนธันวาคม 2005

บั๊กนี้เก่ามาก แอปพลิเคชันของคุณอาจต้องพึ่งมันหรือวิธีแก้ปัญหา
ตรวจสอบแอปพลิเคชันก่อนอัปเกรดเป็นรุ่นนี้

ตัวอย่างของการเรียกเมธอดที่ได้รับผลกระทบ:

$q->url(-absolute => 1, -query => 1, -path_info => 1);
$q->url(-path=>1);
$q->url(-full=>1,-path=>1);
$q->url(-rewrite=>1,-path=>1);
$q->self_url();

เราไม่อ่านจาก STDIN อีกต่อไปเมื่อไม่ได้ตั้งค่าความยาวเนื้อหา ทำให้ไม่สามารถร้องขอได้
โดยไม่มีเนื้อหายาวจากการแช่แข็งในบางครั้ง ซึ่งสอดคล้องกับ CGI RFC
3875 และยังสอดคล้องกับ CGI::Simple อย่างไรก็ตาม พฤติกรรมเก่าๆ อาจมี
ได้รับการคาดหวังจากการใช้บรรทัดคำสั่งบางอย่างของ CGI.pm

นอกจากนี้ยังรองรับกริยา DELETE HTTP อีกด้วย

· บีบอัด :: Zlib ได้รับการอัปเกรดจากเวอร์ชัน 2.035 เป็น 2.048

IO::Compress::Zip และ IO::Uncompress::Unzip รองรับ LZMA แล้ว (วิธีที่ 14)
มีการแก้ไขปัญหา CRC ใน IO::Compress::Unzip และรองรับ Streamed Stored
บริบทในขณะนี้ และแก้ไขปัญหา Zip64 ใน IO::Compress::Zip เมื่อขนาดเนื้อหาเป็น
0xFFFFFFFF ตรง ๆ

· Digest::SHA ได้รับการอัปเกรดจากเวอร์ชัน 5.61 เป็น 5.71 แล้ว

เพิ่มโหมด BITS ให้กับเมธอด addfile และ shasum ทำให้อินพุตบางส่วนไบต์
เป็นไปได้ผ่านไฟล์ / STDIN และให้ shasum ตรวจสอบเวกเตอร์ข่าวสาร NIST 8074 ทั้งหมดโดยที่
ก่อนหน้านี้จำเป็นต้องมีการเขียนโปรแกรมพิเศษเพื่อทำเช่นนี้

· การเข้ารหัสได้รับการอัปเกรดจากเวอร์ชัน 2.42 เป็น 2.44

เพิ่มนามแฝงที่หายไป แก้ไขข้อผิดพลาดการเรียกซ้ำในเชิงลึก และการอัปเดตเอกสารต่างๆ

แก้ไขข้อผิดพลาดการรักษาความปลอดภัย 'decode_xs n-byte heap-overflow' ใน Unicode.xs (CVE-2011-2939)
(5.14.2)

· ExtUtils::CBuilder อัปเดตจากเวอร์ชัน 0.280203 เป็น 0.280206

เวอร์ชันใหม่ผนวก CFLAGS และ LDFLAGS ต่อท้าย Config.pm

· ExtUtils::ParseXS ได้รับการอัปเกรดจากเวอร์ชัน 2.2210 เป็น 3.16 แล้ว

ExtUtils::ParseXS ซึ่งเป็นโมดูลที่อยู่เบื้องหลังคอมไพเลอร์ XS "xsubpp" ส่วนใหญ่ถูกเขียนใหม่
และทำความสะอาด มันถูกทำให้ขยายได้ค่อนข้างมากขึ้นและตอนนี้ในที่สุดก็ใช้
การเข้มงวด

ตรรกะของแผนผังพิมพ์ถูกย้ายไปยังโมดูลแยกต่างหาก ExtUtils::Typemaps ดู "ใหม่
โมดูลและ Pragmata" ด้านบน

สำหรับชุดการเปลี่ยนแปลงทั้งหมด โปรดดูบันทึกการเปลี่ยนแปลง ExtUtils::ParseXS พร้อมใช้งาน
บน กปปส.

· File::Glob ได้รับการอัปเกรดจากเวอร์ชัน 1.12 เป็น 1.17 แล้ว

บน Windows การขยายตัวหนอน (~) จะตรวจสอบตัวแปรสภาพแวดล้อม "USERPROFILE"
หลังจากตรวจสอบ "หน้าแรก"

มีแท็กส่งออก ":bsd_glob" ใหม่ มีวัตถุประสงค์เพื่อแทนที่ ":glob" ชอบ ":glob" มัน
แทนที่ "glob" ด้วยฟังก์ชันที่ไม่แบ่งรูปแบบ glob เป็นคำ แต่
ไม่เหมือนกับ ":glob" มันวนซ้ำอย่างถูกต้องในบริบทสเกลาร์ แทนที่จะส่งคืนค่าสุดท้าย
ไฟล์

มีการเปลี่ยนแปลงอื่นๆ ที่ส่งผลต่อตัวดำเนินการ "glob" ของ Perl (ซึ่งใช้ 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

การอัปเกรดเหล่านี้ช่วยแก้ไขปัญหาด้วย "getline" และ "getlines" ของ IO::Handle
วิธีการ เมื่อเมธอดเหล่านี้ถูกเรียกบนแฮนเดิล ARGV พิเศษ ไฟล์ถัดไปคือ
เปิดโดยอัตโนมัติ เช่นเดียวกับฟังก์ชัน "<>" และ "readline" ในตัว
แต่ต่างจากบิวด์อิน วิธีการเหล่านี้ไม่เคารพการใช้ .ของผู้โทร
เปิด Pragma และใช้เลเยอร์ I/O ที่เหมาะสมกับไฟล์ที่เพิ่งเปิดใหม่
[rt.cpan.org #66474]

· IPC::Cmd ได้รับการอัปเกรดจากเวอร์ชัน 0.70 เป็น 0.76

รองรับการบันทึกเอาต์พุตคำสั่ง (ทั้ง "STDOUT" และ "STDERR") โดยใช้
IPC::Open3 บน MSWin32 โดยไม่ต้องใช้ IPC::Run

· IPC::Open3 ได้รับการอัปเกรดจากเวอร์ชัน 1.09 เป็น 1.12

แก้ไขข้อผิดพลาดที่ทำให้ไม่สามารถใช้ "open3" บน Windows เมื่อ *STDIN, *STDOUT หรือ *STDERR
ได้รับการแปลเป็นภาษาท้องถิ่น

แก้ไขข้อผิดพลาดที่ป้องกันไม่ให้ตัวอธิบายไฟล์ตัวเลขซ้ำกันใน 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 เพื่ออนุญาต
เพิ่มเติมในอนาคตที่สะอาดขึ้น สี่โมดูลดั้งเดิม (Locale::Language,
Locale::Currency, Locale::Country, Locale::Script) จะยังคงใช้งานได้ แต่รูปแบบใหม่ทั้งหมด
ชุดของรหัสจะถูกเพิ่มในเนมสเปซ Locale::Codes

ฟังก์ชัน code2XXX, XXX2code, all_XXX_codes และ all_XXX_names รองรับการเลิกใช้แล้ว
รหัส ชุดรหัสทั้งหมดอาจถูกระบุโดยค่าคงที่หรือตามชื่อในตอนนี้ ก่อนหน้านี้,
พวกมันถูกกำหนดโดยค่าคงที่เท่านั้น

มีฟังก์ชัน alias_code สำหรับความเข้ากันได้แบบย้อนหลัง มันถูกแทนที่ด้วย
เปลี่ยนชื่อ_country_code ฟังก์ชัน alias_code จะถูกลบออกหลังจาก
กันยายน 2013

ตอนนี้งานทั้งหมดเสร็จสิ้นในโมดูลกลาง (Locale::Codes) ก่อนหน้านี้บางคนเคยเป็น
ยังคงทำในโมดูลแรปเปอร์ (Locale::Codes::*) เพิ่มรหัสตระกูลภาษา
(langfam) ตามที่กำหนดไว้ใน ISO 639-5

· คณิตศาสตร์::BigFloat ได้รับการอัปเกรดจากเวอร์ชัน 1.993 เป็น 1.997

วิธีการ "numify" ได้รับการแก้ไขเพื่อส่งคืนหมายเลข Perl ปกติ (ผลลัพธ์
ของ "0 + $thing") แทนที่จะเป็นสตริง [rt.cpan.org #66732]

· คณิตศาสตร์::BigInt ได้รับการอัปเกรดจากเวอร์ชัน 1.994 เป็น 1.998

มีวิธีการ "bsgn" ใหม่ที่เสริมวิธีการ "babs"

แก้ไขการจัดการของฟังก์ชัน "objectify" ภายในของ "วัตถุแปลกปลอม" ให้เป็นจริง
แปลงเป็นคลาสที่เหมาะสม (Math::BigInt หรือ Math::BigFloat)

· คณิตศาสตร์::BigRat ได้รับการอัปเกรดจากเวอร์ชัน 0.2602 เป็น 0.2603

"int()" บนวัตถุ Math::BigRat ที่มี -1/2 ตอนนี้สร้าง Math::BigInt ที่มี
0 แทนที่จะเป็น -0 Math::BigInt ไม่สนับสนุนแม้แต่ศูนย์ลบ ดังนั้นผลลัพธ์
วัตถุมีรูปแบบไม่ถูกต้อง [perl #95530]

· Math::Complex ได้รับการอัปเกรดจากเวอร์ชัน 1.56 เป็น 1.59 และ Math::Trig จากเวอร์ชัน
เพื่อ 1.2 1.22

การแก้ไขรวมถึง: การใช้ตัวสร้างสำเนาที่ถูกต้อง แก้ไขการจัดรูปแบบขั้วด้วยตัวเลข
ตัวระบุรูปแบบ และอัลกอริทึม "great_circle_direction" ที่เสถียรยิ่งขึ้น

· โมดูล :: CoreList ได้รับการอัปเกรดจากเวอร์ชัน 2.51 เป็น 2.66

ตอนนี้ยูทิลิตี้ "corelist" เข้าใจตัวเลือก "-r" สำหรับการแสดง Perl release
วันที่และตัวเลือก "--diff" เพื่อพิมพ์ชุดของการเปลี่ยนแปลง modlib ระหว่างสอง perl
การแจกแจง

· โมดูล :: Metadata ได้รับการอัปเกรดจากเวอร์ชัน 1.000004 เป็น 1.000009

เพิ่มวิธีการ "จัดเตรียม" เพื่อสร้าง CPAN META จัดเตรียมโครงสร้างข้อมูลอย่างถูกต้อง ใช้
ของ "package_versions_from_directory" ไม่สนับสนุน

· ODBM_File ได้รับการอัปเกรดจากเวอร์ชัน 1.10 เป็น 1.12

ตอนนี้โค้ด XS ถูกคอมไพล์ด้วย "PERL_NO_GET_CONTEXT" ซึ่งจะช่วยเพิ่มประสิทธิภาพ
ภายใต้หัวข้อ

· เปิดได้รับการอัปเกรดจากเวอร์ชัน 1.08 เป็น 1.10 แล้ว

จะไม่ปิดเลเยอร์บนแฮนเดิลมาตรฐานอีกต่อไปเมื่อเรียกใช้โดยไม่มี ":std"
คำสั่ง ในทำนองเดียวกันเมื่อถูกเรียก สีสดสวย คำสั่ง ":std" ตอนนี้ล้างเลเยอร์บน
STDERR ก่อนใช้อันใหม่ ไม่ใช่แค่ใน STDIN และ STDOUT [perl #92728]

· โอเวอร์โหลดได้รับการอัปเกรดจากเวอร์ชัน 1.13 เป็น 1.18

"overload::Overloaded" จะไม่เรียก "can" ในชั้นเรียนอีกต่อไป แต่ใช้วิธีการอื่นเพื่อ
ตรวจสอบว่าวัตถุมีการโอเวอร์โหลดหรือไม่ มันไม่ถูกต้องที่จะเรียก
"สามารถ" เนื่องจากการโอเวอร์โหลดไม่เคารพ AUTOLOAD ดังนั้นคลาสที่โหลดเมธอดอัตโนมัติและ
ใช้ "can" โดยไม่ต้องคำนึงถึงการโอเวอร์โหลดอีกต่อไป [perl #40333]

ขณะนี้มีการสร้างคำเตือนสำหรับอาร์กิวเมนต์ที่ไม่ถูกต้อง ดู "การวินิจฉัยใหม่"

· PerlIO::scalar ได้รับการอัปเกรดจากเวอร์ชัน 0.11 เป็น 0.14

(นี่คือโมดูลที่ใช้ "open $fh, '>', \$scalar")

มันแก้ไขปัญหาด้วย "open my $fh, ">", \$scalar" ไม่ทำงานหาก $scalar เป็นสำเนา-
สเกลาร์เมื่อเขียน (5.14.2)

นอกจากนี้ยังแก้ไขการแฮงค์ที่เกิดขึ้นกับ "readline" หรือ "<$fh>" หากเป็น typeglob
กำหนดให้ $scalar [perl #92258]

จะไม่ถือว่าในระหว่าง "แสวงหา" อีกต่อไปว่า $scalar เป็นสตริงภายใน ถ้ามันไม่ได้
พัง มันเกือบจะเป็นแบบนั้นแล้ว [perl #92706] นอกจากนี้ รูทีนการพิมพ์ภายใน no
สมมติอีกต่อไปว่าตำแหน่งที่กำหนดโดย "seek" นั้นถูกต้อง แต่ขยายสตริงเป็น
ตำแหน่งนั้นกรอกไบต์แทรก (ระหว่างความยาวเก่าและแสวงหา
ตำแหน่ง) ด้วยค่าว่าง [perl #78980]

การพิมพ์ไปยังหมายเลขอ้างอิงในหน่วยความจำใช้งานได้หาก $scalar มีข้อมูลอ้างอิง
ทำให้การอ้างอิงเป็นสตริงก่อนที่จะแก้ไข ข้อมูลอ้างอิงที่ใช้ถือเป็น
สตริงที่ว่างเปล่า

การพิมพ์ไปยังแฮนเดิลในหน่วยความจำจะไม่หยุดทำงานอีกต่อไปหาก $scalar เกิดขึ้นกับ a
หมายเลขภายใน แต่ไม่มีบัฟเฟอร์สตริง

การพิมพ์ไปยังจุดจับในหน่วยความจำจะไม่สร้างสเกลาร์ที่สร้างความสับสนให้กับตัวปกติอีกต่อไป
เอ็นจิ้นการแสดงออก [perl #108398]

· Pod::Functions ได้รับการอัปเกรดจากเวอร์ชัน 1.04 เป็น 1.05

หน้าที่.น ถูกสร้างในเวลาบิลด์ Perl จากคำอธิบายประกอบใน perlfunc.pod.
เพื่อให้แน่ใจว่า Pod::Functions และ perlfunc ยังคงอยู่ในการซิงโครไนซ์

· Pod::Html ได้รับการอัปเกรดจากเวอร์ชัน 1.11 เป็น 1.1502 แล้ว

นี่คือการเขียนใหม่อย่างกว้างขวางของ Pod::Html เพื่อใช้ Pod::Simple ภายใต้ประทุน ดิ
ผลผลิตมีการเปลี่ยนแปลงอย่างมาก

· Pod::Perldoc ได้รับการอัปเกรดจากเวอร์ชัน 3.15_03 เป็น 3.17 แล้ว

แก้ไขเส้นทางการค้นหาบน VMS [perl #90640] (5.14.1)

การขอ -v ตัวเลือกตอนนี้ดึงส่วนที่ถูกต้องสำหรับ $ 0

การอัปเกรดนี้มีการแก้ไขที่สำคัญมากมาย ปรึกษาการเปลี่ยนแปลงใน CPAN สำหรับ
ข้อมูลมากกว่านี้.

· POSIX ได้รับการอัปเกรดจากเวอร์ชัน 1.24 เป็น 1.30 แล้ว

POSIX ไม่ใช้ AutoLoader อีกต่อไป รหัสใด ๆ ที่อาศัยการใช้งานนี้
รายละเอียดมีข้อบกพร่องและอาจล้มเหลวเนื่องจากการเปลี่ยนแปลงนี้ รหัส Perl ของโมดูลมี
ถูกทำให้ง่ายขึ้นอย่างมาก ลดจำนวนบรรทัดลงครึ่งหนึ่งโดยประมาณ โดยไม่มีการเปลี่ยนแปลง
ฟังก์ชั่น รหัส XS ได้รับการปรับโครงสร้างใหม่เพื่อลดขนาดของการแชร์
วัตถุประมาณ 12% โดยไม่มีการเปลี่ยนแปลงในการทำงาน ฟังก์ชัน POSIX เพิ่มเติมในขณะนี้มี
การทดสอบ

ตอนนี้ "sigsuspend" และ "pause" เรียกใช้ตัวจัดการสัญญาณก่อนกลับมา เป็นจุดทั้งหมด
ของสองหน้าที่นี้ คือ รอจนมีสัญญาณมา แล้วกลับ หลังจาก it
ได้รับการกระตุ้น สัญญาณล่าช้าหรือ "ปลอดภัย" ป้องกันไม่ให้เกิดขึ้น
อาจส่งผลให้สภาพการแข่งขัน [perl #107216]

ขณะนี้ "POSIX::sleep" เป็นการเรียกโดยตรงไปยังฟังก์ชัน "sleep" ของระบบปฏิบัติการแทน
ของการเป็นเครื่องห่อหุ้ม Perl ใน "CORE::sleep" "POSIX::dup2" จะคืนค่าที่ถูกต้อง
บน Win32 (เช่น, ตัวอธิบายไฟล์) "POSIX::SigSet" "sigsuspend" และ "sigpending"
และ "POSIX::pause" จะส่งสัญญาณที่ปลอดภัยทันทีก่อนที่จะกลับไปที่
ผู้เรียก

"POSIX::Termios::setattr" ตั้งค่าเริ่มต้นอาร์กิวเมนต์ที่สามเป็น "TCSANOW" แทนที่จะเป็น 0
บนแพลตฟอร์มส่วนใหญ่ "TCSANOW" ถูกกำหนดให้เป็น 0 แต่ในบาง 0 ไม่ใช่ค่าที่ถูกต้อง
พารามิเตอร์ซึ่งทำให้การเรียกที่มีค่าเริ่มต้นล้มเหลว

· ซ็อกเก็ตได้รับการอัปเกรดจากเวอร์ชัน 1.94 เป็น 2.001

มีฟังก์ชันและค่าคงที่ใหม่สำหรับการจัดการซ็อกเก็ต IPv6:

pack_ipv6_mreq
unpack_ipv6_mreq
IPV6_ADD_สมาชิก
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 แล้ว

จะไม่เปลี่ยนสเกลาร์ copy-on-write เป็นสเกลาร์แบบอ่านอย่างเดียวอีกต่อไปเมื่อแช่แข็งและ
การละลาย

· Sys::Syslog ได้รับการอัปเกรดจากเวอร์ชัน 0.27 เป็น 0.29

การอัปเกรดนี้ปิดจุดบกพร่องที่โดดเด่นมากมาย

· Term::ANSIColor ได้รับการอัปเกรดจากเวอร์ชัน 3.00 เป็น 3.01 แล้ว

ตีความการอ้างอิงอาร์เรย์เริ่มต้นเป็นรายการสีเท่านั้น ไม่ใช่ชื่อย่อใดๆ
อ้างอิงทำให้ฟังก์ชันสีทำงานอย่างถูกต้องกับวัตถุด้วย
การกำหนดความเข้มงวด

· Term::ReadLine ได้รับการอัปเกรดจากเวอร์ชัน 1.07 เป็น 1.09 แล้ว

Term::ReadLine รองรับการวนซ้ำของเหตุการณ์แล้ว รวมถึงรายการที่ไม่ได้เผยแพร่และแบบง่าย
IO::Select, วนซ้ำโดยไม่จำเป็นต้องเขียนโค้ดที่มีอยู่ใหม่สำหรับเฉพาะใดๆ
กรอบงาน [perl #108470]

· threads::shared ได้รับการอัปเกรดจากเวอร์ชัน 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, แว

ideographs ที่เข้ากันได้ที่ปรับให้เหมาะสมรวมถึง ideographs แบบรวมสำหรับโลแคล: ja,
โก, zh__big5han, zh__gb2312han, zh__pinyin, zh__stroke.

ค้นหาไฟล์ Locale/*.pl ใน @INC

· Unicode::Normalize ได้รับการอัปเกรดจากเวอร์ชัน 1.10 เป็น 1.14

การแก้ไขสำหรับการลบ ยูนิคอร์/CompositionExclusions.txt จากแกน

· Unicode::UCD ได้รับการอัปเกรดจากเวอร์ชัน 0.32 เป็น 0.43

เพิ่มฟังก์ชันใหม่สี่อย่าง: "prop_aliases()" และ "prop_value_aliases()" ซึ่งเป็น
ใช้เพื่อค้นหาคำพ้องความหมายทั้งหมดที่ได้รับการอนุมัติจาก Unicode สำหรับชื่อคุณสมบัติหรือเพื่อแปลงจากหนึ่ง
ชื่ออื่น; "prop_invlist" ซึ่งส่งคืนจุดโค้ดทั้งหมดที่ตรงกับ Unicode . ที่กำหนด
คุณสมบัติไบนารี และ "prop_invmap" ซึ่งส่งคืนคุณสมบัติที่สมบูรณ์ของ
คุณสมบัติ Unicode

· Win32API::ไฟล์ได้รับการอัปเกรดจากเวอร์ชัน 0.1101 เป็น 0.1200

เพิ่มฟังก์ชัน SetStdHandle และ GetStdHandle

ลบออก โมดูล และ ในทางปฏิบัติ
ตามที่สัญญาไว้ในบันทึกประจำรุ่นของ Perl 5.14.0 โมดูลต่อไปนี้ได้ถูกลบออกจาก
การกระจายหลักและหากจำเป็นควรติดตั้งจาก CPAN แทน

· Devel::DPof ถูกลบออกจาก Perl core รุ่นก่อนหน้าคือ 20110228.00

· เชลล์ถูกลบออกจากแกน Perl แล้ว เวอร์ชันก่อนหน้าคือ 0.72_01

· ไลบรารี่สไตล์ perl4 เก่าหลายตัวที่เลิกใช้ 5.14 แล้วตอนนี้
กำจัดไขมันส่วนเกิน:

abbrev.pl assert.pl bigfloat.pl bigint.pl bigrat.pl cacheout.pl
complete.pl ctime.pl dotsh.pl ข้อยกเว้น.pl fastcwd.pl flush.pl
getcwd.pl getopt.pl getopts.pl ชื่อโฮสต์.pl importenv.pl
lib/ค้นหา{,ความลึก}.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 อธิบายการสนับสนุน DTrace ของ Perl โดยแสดงรายการโพรบที่ให้มาและให้ตัวอย่าง
ของการใช้งานของพวกเขา

ความสับสน

เอกสารนี้จัดทำขึ้นเพื่อให้รายการคุณลักษณะทดลองใน Perl ก็ยังคงเป็น
งานระหว่างทำ

แหกตา

นี้เป็นกวดวิชา OO ใหม่ เน้นที่แนวคิด OO พื้นฐาน แล้วแนะนำให้ผู้อ่าน
เลือกเฟรมเวิร์ก OO จาก CPAN

perlxstypemap

คู่มือใหม่อธิบายกลไกการแมป XS ในรายละเอียดที่ไม่เคยมีมาก่อนและรวมเข้าด้วยกัน
เอกสารใหม่พร้อมข้อมูลที่ดึงมาจาก perlxs และเอกสารที่ไม่เป็นทางการก่อนหน้านี้
รายการ typemap หลักทั้งหมด

การเปลี่ยนแปลง ไปยัง ที่มีอยู่ เอกสาร
เพอลาปี้

· HV API ยอมรับความยาวติดลบมานานแล้วเพื่อแสดงว่าคีย์อยู่ใน UTF8 นี้
ได้รับการบันทึกในขณะนี้

· ขณะนี้มีการจัดทำเอกสารมาโคร "boolSV()" แล้ว

เพอร์ฟุน

· "dbmopen" ถือว่าโหมด 0 เป็นกรณีพิเศษที่ป้องกันไฟล์ที่ไม่มีอยู่จาก
กำลังถูกสร้างขึ้น เป็นกรณีนี้ตั้งแต่ Perl 5.000 แต่ไม่เคยมีการบันทึก
ที่ไหนก็ได้ ตอนนี้รายการ perlfunc กล่าวถึง [perl #90064]

· จากอุบัติเหตุของประวัติศาสตร์ "open $fh, '<:', ..." ใช้เลเยอร์เริ่มต้นสำหรับ
แพลตฟอร์ม (":raw" บน Unix, ":crlf" บน Windows) โดยไม่สนใจสิ่งที่ประกาศโดย
เปิด.น. ดูเหมือนว่าจะเป็นคุณสมบัติที่มีประโยชน์ที่ได้รับการบันทึกไว้ใน perlfunc และ
เปิด.

· รายการสำหรับ "แยก" ถูกเขียนใหม่ ตอนนี้มันชัดเจนกว่าเมื่อก่อนมาก

เพิร์ล

· เพิ่มส่วนใหม่ การโหลดอัตโนมัติด้วย XSUB ซึ่งอธิบาย API ทั้งสองสำหรับ
การเข้าถึงชื่อย่อยที่โหลดอัตโนมัติ

· คำอธิบายฟังก์ชันบางอย่างในภาษา Perlgut ทำให้เกิดความสับสน เนื่องจากไม่ชัดเจนว่า
พวกเขาอ้างถึงฟังก์ชันด้านบนหรือด้านล่างของคำอธิบาย นี้ได้รับการชี้แจง
[เพิร์ล #91790].

เพอร์ลอบ

· เอกสารนี้ถูกเขียนใหม่ตั้งแต่ต้น และครอบคลุมถึงแนวคิด OO ต่างๆ
ได้รับการขยาย

เพอร์ล็อป

· เอกสารของตัวดำเนินการ smartmatch ได้รับการแก้ไขและย้ายจาก perlsyn ไปยัง
perlop ที่มันเป็น

นอกจากนี้ยังได้รับการแก้ไขสำหรับกรณีของ "undef" ทางด้านซ้ายมือ รายการของ
พฤติกรรมการจับคู่สมาร์ทที่แตกต่างกันมีรายการผิดที่

· เอกสารของคำสั่งจุดไข่ปลา ("...") ได้รับการแก้ไขและย้ายจาก
perlop ถึง perlsyn

· มีการขยายคำอธิบายของตัวดำเนินการระดับบิตเพื่ออธิบายวิธีการทำงาน
สตริง Unicode (5.14.1)

· มีการเพิ่มตัวอย่างเพิ่มเติมสำหรับ "m//g" (5.14.1)

· ไวยากรณ์ "<<\FOO" here-doc ได้รับการบันทึกไว้แล้ว (5.14.1)

เพอร์ลปรามา

· ขณะนี้มีแบบแผนมาตรฐานสำหรับการตั้งชื่อคีย์ใน "%^H" ซึ่งจัดทำเป็นเอกสารภายใต้Key
การตั้งชื่อ.

“การฟอก และ การตรวจจับ เสีย ข้อมูล" in เพิร์ล

· ฟังก์ชันตัวอย่างสำหรับตรวจสอบการปนเปื้อนมีข้อผิดพลาดเล็กน้อย $@ จำเป็น
ที่จะแปลเป็นภาษาท้องถิ่นเพื่อป้องกันการเปลี่ยนแปลงค่าส่วนกลางนี้นอกฟังก์ชัน ดิ
วิธีที่ต้องการเพื่อตรวจสอบสิ่งนี้ยังคง "เสีย" ใน Scalar::Util

เพิร์ลลล

· Perllol ได้รับการขยายด้วยตัวอย่างโดยใช้ไวยากรณ์ "push $scalar" ใหม่ที่แนะนำ
ใน Perl 5.14.0 (5.14.1)

เพิร์ลมอด

· ตอนนี้ perlmod ระบุอย่างชัดเจนว่าบางประเภทของการจัดการตารางสัญลักษณ์ที่ชัดเจน
ไม่รองรับ สิ่งนี้จะประมวลสิ่งที่เป็นกรณีไปแล้วอย่างมีประสิทธิภาพ [perl #78074]

เพิร์ลพอดสไตล์

· เคล็ดลับในการจัดรูปแบบโค้ดที่จะใช้ได้รับการแก้ไขและขยายออกไปอย่างมาก

· ตอนนี้มีตัวอย่างหนึ่งซับสองสามตัวอย่างสำหรับดูตัวอย่างไฟล์ POD หลังจากมี
ได้รับการแก้ไข

เพิร์ล

· คำสั่ง "(*COMMIT)" อยู่ในส่วนที่ถูกต้องแล้ว (กริยาที่ไม่มี an
การโต้แย้ง).

เพิร์ลรัน

· perlrun ได้รับการทำความสะอาดที่สำคัญ ที่โดดเด่นที่สุดคือ -0x... รูปแบบของ -0
แฟล็กได้รับการชี้แจงและส่วนสุดท้ายเกี่ยวกับตัวแปรสภาพแวดล้อมได้รับการ
แก้ไขและขยาย (5.14.1)

เพิร์ลซับ

· ไวยากรณ์ต้นแบบ ($;) ซึ่งมีมาช้านานแล้ว ได้รับการบันทึกไว้แล้ว
ในเพิร์ลซับ ช่วยให้ฟังก์ชัน unary มีลำดับความสำคัญเหมือนกับตัวดำเนินการรายการ

เพอร์ตี้

· ไวยากรณ์ที่จำเป็นสำหรับการผูกจุดจับได้รับการบันทึกไว้แล้ว

เพิร์ลวาร์

· เอกสารสำหรับ $! ได้แก้ไขและชี้แจงแล้ว เคยกล่าวไว้ว่า $!
อาจเป็น "undef" ซึ่งไม่ใช่กรณี ยังไม่ชัดเจนว่าการเรียกของระบบตั้งค่าไว้หรือไม่
"errno" ของ C หรือ $ ของ Perl! [เพิร์ล #91614]

· เอกสารสำหรับ $$ ได้รับการแก้ไขด้วยคำเตือนเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลง
รหัสกระบวนการ

อื่นๆ การเปลี่ยนแปลง

· perlxs ถูกขยายด้วยเอกสารประกอบเกี่ยวกับ typemaps แบบอินไลน์

· perlref มีส่วนอ้างอิงแบบวงกลมใหม่ที่อธิบายว่าวงกลมอาจไม่เป็น
เป็นอิสระและวิธีแก้ปัญหาด้วยการอ้างอิงที่อ่อนแอ

· บางส่วนของ Perlapi ได้รับการชี้แจงและ Perl เทียบเท่าของฟังก์ชัน C บางตัวได้รับการ
เพิ่มเป็นโหมดเพิ่มเติมของการแสดง

· มีการชี้แจงบางส่วนของ perlre และ perlrecharclass

ลบออก เอกสาร
เก่า OO เอกสาร

บทช่วยสอน OO เก่า, perltoot, perltooc และ perlboot ถูกลบออก เพิร์ลบอต
(กระเป๋ากลอุบาย) เอกสารก็ถูกเอาออกเช่นกัน

พัฒนาการ สันดอน

ไฟล์ perldelta สำหรับรุ่นการพัฒนาจะไม่ถูกรวมเข้ากับ Perl อีกต่อไป กระป๋องเหล่านี้
ยังคงพบได้ในที่เก็บซอร์สโค้ด Perl

การวินิจฉัย


มีการเพิ่มหรือเปลี่ยนแปลงต่อไปนี้ในเอาต์พุตการวินิจฉัย รวมถึงคำเตือน
และข้อความแสดงข้อผิดพลาดร้ายแรง สำหรับรายการข้อความวินิจฉัยทั้งหมด โปรดดูที่ perldiag

ใหม่ การวินิจฉัย
ใหม่ ข้อผิดพลาด

· ไม่สามารถตั้งค่าผูก @DB::args

ข้อผิดพลาดนี้เกิดขึ้นเมื่อ "ผู้โทร" พยายามตั้งค่า @DB::args แต่พบว่าตรงกัน ก่อนหน้านี้
มีการเพิ่มข้อผิดพลาด มันเคยผิดพลาดแทน

· ไม่สามารถผูกอาร์เรย์ที่ไม่สามารถแก้ไขได้

ข้อผิดพลาดนี้เป็นส่วนหนึ่งของการตรวจสอบความปลอดภัยที่ผู้ดำเนินการ "เน็คไท" ทำก่อนที่จะผูก a
อาร์เรย์พิเศษเช่น @_ คุณไม่ควรเห็นข้อความนี้

· &CORE::%s ไม่สามารถเรียกได้โดยตรง

สิ่งนี้เกิดขึ้นเมื่อรูทีนย่อยในเนมสเปซ "CORE::" ถูกเรียกด้วยไวยากรณ์ &foo หรือ
ผ่านการอ้างอิง รูทีนย่อยบางตัวในแพ็คเกจนี้ยังไม่สามารถเรียกแบบนั้นได้
แต่ต้องเรียกว่าเป็นคำเปล่า ดู "รูทีนย่อยในเนมสเปซ "CORE" ด้านบน

· ตัวกรองแหล่งที่มาใช้กับสตรีมไบต์เท่านั้น

ข้อผิดพลาดใหม่นี้เกิดขึ้นเมื่อคุณพยายามเปิดใช้งานตัวกรองต้นทาง (โดยปกติโดยการโหลด a
โมดูลตัวกรองต้นทาง) ภายในสตริงที่ส่งผ่านไปยัง "eval" ภายใต้ "unicode_eval"
ลักษณะ

ใหม่ คำแนะนำ:

· กำหนด(@array) เลิกใช้แล้ว

ตอนนี้ "defined(@array)" เลิกใช้มานานยังเตือนสำหรับตัวแปรแพ็คเกจด้วย
ก่อนหน้านี้ได้ออกคำเตือนสำหรับตัวแปรคำศัพท์เท่านั้น

· ระยะเวลา() ใช้กับ %s

คำเตือนใหม่นี้เกิดขึ้นเมื่อใช้ "ความยาว" ในอาร์เรย์หรือแฮชแทน
"scalar(@array)" หรือ "scalar(คีย์ %แฮช)"

· lvalue แอตทริบิวต์ %s รูทีนย่อยที่กำหนดไว้แล้ว

ขณะนี้ attributes.pm ส่งคำเตือนนี้เมื่อแอตทริบิวต์ :lvalue ถูกนำไปใช้กับ Perl
รูทีนย่อยที่กำหนดไว้แล้ว เนื่องจากการทำเช่นนั้นอาจมีด้านที่ไม่คาดคิด
ผลกระทบ

· หาเรื่องโอเวอร์โหลด '%s' ไม่ถูกต้อง

คำเตือนนี้ ในหมวด "โอเวอร์โหลด" เกิดขึ้นเมื่อโอเวอร์โหลด Pragma เป็น
เมื่อได้รับอาร์กิวเมนต์ที่ไม่รู้จัก น่าจะเป็นโอเปอเรเตอร์ที่พิมพ์ผิด

· $[ ใช้ใน %s (คุณหมายถึง $] ?)

มีคำเตือนใหม่นี้เพื่อตรวจจับการใช้ $[ อย่างผิดพลาดในการตรวจสอบเวอร์ชัน $] ไม่ใช่
$[ มีหมายเลขเวอร์ชัน

·การมอบหมายที่ไร้ประโยชน์ให้กับชั่วคราว

การกำหนดสเกลาร์ชั่วคราวที่ส่งคืนจากรูทีนย่อย lvalue ตอนนี้จะสร้างสิ่งนี้
คำเตือน [perl #31946]

· การใช้ \E . อย่างไร้ประโยชน์

"\E" จะไม่ทำอะไรเลย เว้นแต่ว่านำหน้าด้วย "\Q", "\L" หรือ "\U"

ลบออก ข้อผิดพลาด
· "การเรียงลำดับเป็นคำสงวนแล้ว"

ข้อผิดพลาดนี้เคยเกิดขึ้นเมื่อเรียก "sort" โดยไม่มีอาร์กิวเมนต์ ตามด้วย ";" หรือ
")". (เช่น "sort;" จะตาย แต่ "{sort}" ใช้ได้) ข้อความแสดงข้อผิดพลาดนี้ถูกเพิ่มใน
Perl 3 เพื่อจับรหัสเช่น "close(sort)" ซึ่งจะใช้งานไม่ได้อีกต่อไป มากกว่าสอง
หลายทศวรรษต่อมา ข้อความนี้ไม่เหมาะสมอีกต่อไป ตอนนี้ "เรียงลำดับ" โดยไม่มีอาร์กิวเมนต์ is
อนุญาตเสมอและส่งคืนรายการว่างเหมือนในกรณีที่เคยเป็น
อนุญาตแล้ว [perl #90030]

การเปลี่ยนแปลง ไปยัง ที่มีอยู่ การวินิจฉัย
· "กำลังใช้การจับคู่รูปแบบ..." หรือคำเตือนที่คล้ายกันซึ่งเกิดขึ้นเมื่ออาร์เรย์หรือแฮชเป็น
ทางด้านซ้ายของตัวดำเนินการ "=~" จะกล่าวถึงชื่อของตัวแปร

· "ความพยายามที่จะปลดปล่อยสตริงที่ใช้ร่วมกันที่ไม่มีอยู่จริง" มีการสะกดคำว่า "ไม่มี-
มีอยู่จริง" แก้ไขเป็น "ไม่มีอยู่" มีรายการสะกดถูกต้องแล้ว
ใน perldiag

· ข้อความแสดงข้อผิดพลาดสำหรับการใช้ "ค่าเริ่มต้น" และ "เมื่อ" นอกตัวช่วยเฉพาะที่ไปแล้ว
ได้มาตรฐานเพื่อให้ตรงกับข้อความสำหรับ "ดำเนินการต่อ" และการควบคุมแบบวนซ้ำ ตอนนี้พวกเขาอ่าน
'ไม่สามารถ "เริ่มต้น" นอกตัวช่วยเฉพาะที่' และ 'ไม่สามารถ "เมื่อ" อยู่นอกตัวช่วยเฉพาะที่'
ทั้งคู่เคยเป็น 'ใช้ไม่ได้ .' เมื่อไร() นอกยาทา ' [perl #91514]

· ข้อความ "Code point 0x%X ไม่ใช่ Unicode ไม่มีคุณสมบัติที่ตรงกัน ทั้งหมดผกผัน
คุณสมบัติ do" ถูกเปลี่ยนเป็น "Code point 0x%X ไม่ใช่ Unicode ทั้งหมด \p{} ตรงกัน
ล้มเหลว; การจับคู่ \P{} ทั้งหมดสำเร็จ"

· คำเตือนการกำหนดนิยามใหม่สำหรับรูทีนย่อยคงที่ที่เคยบังคับ แม้จะเกิดขึ้นก็ตาม
ภายใต้ "ไม่มีคำเตือน" ตอนนี้พวกเขาเคารพคำเตือนของ Pragma

· ขณะนี้ข้อความเตือน "glob failed" สามารถระงับได้ผ่าน "ไม่มีคำเตือน" [perl
#111656].

· ข้อความแสดงข้อผิดพลาดรูปแบบเวอร์ชันที่ไม่ถูกต้องในขณะนี้ระบุว่า "หมายเลขเวอร์ชันเชิงลบ" ภายใน
วงเล็บ แทนที่จะเป็น "ข้อมูลที่ไม่ใช่ตัวเลข" สำหรับจำนวนลบ

· คำเตือนทั้งสอง พยายามใส่ความคิดเห็นใน คิวดับบลิว() รายการและความพยายามที่เป็นไปได้ในการ
คำที่คั่นด้วยเครื่องหมายจุลภาคจะไม่แยกจากกันอีกต่อไป: โครงสร้าง "qw" เดียวกัน
อาจผลิตทั้งสองอย่าง

· คำเตือนที่ไม่ได้กำหนดค่าเริ่มต้นสำหรับ "y///r" เมื่อ $_ เป็นโดยปริยายและไม่ได้กำหนดไว้ในขณะนี้
ชื่อตัวแปร เช่นเดียวกับรูปแบบที่ไม่ใช่/r ของโอเปอเรเตอร์

· ขยายคำเตือน 'การใช้ "foo" ที่ไม่มีวงเล็บไม่ชัดเจน' เพื่อนำไปใช้
รวมถึงรูทีนย่อยที่ผู้ใช้กำหนดเองด้วย (;$) ต้นแบบ ไม่ใช่แค่ในตัว
ฟังก์ชั่น

· คำเตือนที่กล่าวถึงชื่อของตัวแปรคำศัพท์ ("my") ด้วยอักขระ Unicode ใน
ตอนนี้พวกเขาเคารพการมีอยู่หรือไม่มีเลเยอร์ ":utf8" บนตัวจัดการเอาต์พุต
แทนที่จะส่งออก UTF8 โดยไม่คำนึงถึง นอกจากนี้ชื่อที่ถูกต้องจะรวมอยู่ใน
สตริงที่ส่งผ่านไปยังตัวจัดการ $SIG{__WARN__} แทนที่จะเป็นไบต์ UTF8 แบบดิบ

ประโยชน์ การเปลี่ยนแปลง


h2ph

· h2ph ใช้สร้างรหัสของแบบฟอร์ม

เว้นแต่ (กำหนด (& FOO)) {
FOO ย่อย () {42;}
}

แต่รูทีนย่อยเป็นการประกาศเวลาคอมไพล์ ดังนั้นจึงไม่ได้รับผลกระทบจาก
สภาพ. ตอนนี้ได้รับการแก้ไขแล้วให้ปล่อยสตริง "eval" รอบรูทีนย่อย
[เพิร์ล #99368].

เคล็ด

· เคล็ด ไม่ส่ง backtraces ด้วยหมายเลขบรรทัดแรกซ้ำอีกต่อไป

นี้:

ไม่พบข้อยกเว้นจากรหัสผู้ใช้:
ไม่สามารถ fwiddle fwuddle ที่ -e บรรทัดที่ 1
ที่ -e สาย 1
main::baz() โทรไปที่ -e line 1
main::bar() เรียกที่ -e บรรทัด 1
main::foo() โทรไปที่ -e line 1

กลายเป็นสิ่งนี้:

ไม่พบข้อยกเว้นจากรหัสผู้ใช้:
ไม่สามารถ fwiddle fwuddle ที่ -e บรรทัดที่ 1
main::baz() โทรไปที่ -e line 1
main::bar() เรียกที่ -e บรรทัด 1
main::foo() โทรไปที่ -e line 1

· ข้อความแสดงข้อผิดพลาดบางรายการประกอบด้วยหลายบรรทัดที่แสดงเป็นรายการแยกต่างหากใน
เพิร์ลดิแอก ได้รับการสอนให้ค้นหารายการแยกในกรณีเหล่านี้แทน
เพียงแต่หาข้อความไม่เจอ

รายละเอียดซิป

· นี่คือยูทิลิตี้ใหม่ ซึ่งรวมอยู่ในการอัปเกรด IO::Compress::Base

zipdetails แสดงข้อมูลเกี่ยวกับโครงสร้างบันทึกภายในของไฟล์ zip
ไม่เกี่ยวข้องกับการแสดงรายละเอียดใด ๆ ของข้อมูลที่บีบอัดที่จัดเก็บไว้ใน
ไฟล์ซิป

องค์ประกอบ และ การรวบรวม


· regexp.h ได้รับการแก้ไขเพื่อให้เข้ากันได้กับ GCC's - ผิดพลาด ตัวเลือกตามที่ใช้โดย
บางโครงการที่มีไฟล์ส่วนหัวของ Perl (5.14.1)

· เพิ่ม "USE_LOCALE{,_COLLATE,_CTYPE,_NUMERIC}" ของ perl -V แล้ว
มีผลกับพฤติกรรมของล่ามไบนารี (แม้ว่าจะอยู่ในพื้นที่เพียงเล็กน้อย)

· รหัสและการทดสอบสำหรับ IPC :: Open2 ถูกย้ายจาก ต่อ/IPC-Open2 เข้าไป
ต่อ/IPC-Open3เนื่องจาก "IPC::Open2::open2()" ถูกใช้งานเป็น wrapper แบบบางรอบๆ
"IPC::Open3::_open3()" และด้วยเหตุนี้จึงมีความเกี่ยวข้องอย่างมากกับมัน

· ตอนนี้ประเภทเวทย์มนตร์และ vtables เวทย์มนตร์ถูกสร้างขึ้นจากข้อมูลในสคริปต์ใหม่
รีเจน/mg_vtable.plแทนที่จะดูแลด้วยมือ เป็นตัวแปร ECDIC ที่แตกต่างกัน
ไม่สามารถตกลงเกี่ยวกับโค้ดพอยต์สำหรับ '~' การแปลงอักขระเป็นโค้ดพอยต์เสร็จสิ้น
ในเวลาที่สร้างโดย สร้าง_uudmap ไปยังส่วนหัวที่สร้างขึ้นใหม่ mg_data.h. "PL_vtbl_bm"
และ "PL_vtbl_fm" ถูกกำหนดโดยตัวประมวลผลล่วงหน้าเป็น "PL_vtbl_regexp" แทนที่จะเป็น
เป็นตัวแปร C ที่แตกต่างกัน "PL_vtbl_sig" ถูกลบออก

· การสร้างด้วย "-DPERL_GLOBAL_STRUCT" กลับมาใช้งานได้อีกครั้ง การกำหนดค่านี้ไม่ได้โดยทั่วไป
มือสอง

· Perl กำหนดค่าด้วย MAD ตอนนี้ทำให้โครงสร้าง "MADPROP" ว่างอย่างถูกต้องเมื่อ OP ว่าง
ขณะนี้ "MADPROP" ได้รับการจัดสรรด้วย "PerlMemShared_malloc()"

· makedef.pl ได้รับการปรับโครงสร้างใหม่ สิ่งนี้ไม่ควรส่งผลกระทบใด ๆ ที่เห็นได้ชัดเจนใน
แพลตฟอร์มที่ใช้เป็นส่วนหนึ่งของบิลด์ (AIX, VMS, Win32)

· "useperlio" ไม่สามารถปิดใช้งานได้อีกต่อไป

· ไฟล์ global.sym ไม่จำเป็นอีกต่อไปและถูกนำออกไปแล้ว มันมีรายการของ
ฟังก์ชันที่ส่งออกทั้งหมด หนึ่งในไฟล์ที่สร้างโดย สร้างใหม่/embed.pl จากข้อมูลใน
embed.fnc และ รีเจน/opcodes. รหัสได้รับการปรับโครงสร้างใหม่เพื่อให้ผู้ใช้เพียงคนเดียวของ
global.sym, makedef.plตอนนี้อ่านว่า embed.fnc และ รีเจน/opcodes โดยตรง ลบ
จำเป็นต้องจัดเก็บรายการฟังก์ชันที่ส่งออกในไฟล์ระดับกลาง

As global.sym ไม่เคยติดตั้ง การเปลี่ยนแปลงนี้ไม่ควรปรากฏภายนอกบิวด์
กระบวนการ

· พ็อด/บิลด์ท็อค, ใช้โดยกระบวนการสร้างเพื่อสร้าง perltoc, ได้รับการปรับโครงสร้างใหม่และ
ง่าย ตอนนี้มีเพียงโค้ดสำหรับสร้าง perltoc; รหัสเพื่อสร้างใหม่
Makefiles ถูกย้ายไปที่ กำลังย้าย/pod_rules.pl. ถือเป็นบัคหากการเปลี่ยนแปลงนี้มีผลใดๆ
ผลกระทบของวัสดุต่อกระบวนการสร้าง

· ฝัก/roffitall ตอนนี้สร้างโดย พ็อด/บิลด์ท็อคแทนที่จะจัดส่งไปกับ
การกระจาย. ขณะนี้มีการสร้างรายการ manpages (และเป็นปัจจุบัน) ดู
RT #103202 สำหรับปัญหาที่เกี่ยวข้องที่ยังไม่ได้แก้ไข

· ไม่ได้ติดตั้ง man page สำหรับ "XS::Typemap" แล้ว "XS::Typemap" เป็นโมดูลทดสอบ
ซึ่งไม่ได้ติดตั้งไว้ ดังนั้นการติดตั้งเอกสารประกอบจึงไม่สมเหตุสมผล

· ตัวเลือก -Dusesitecustomize และ -Duserelocatableinc ทำงานร่วมกันอย่างถูกต้องแล้ว

ระบบปฏิบัติการ ฝ่าย Support ที่หลากหลาย


เฉพาะแพลตฟอร์ม หมายเหตุ :
Cygwin

· ตั้งแต่เวอร์ชัน 1.7 Cygwin รองรับเส้นทาง UTF-8 ดั้งเดิม ถ้า Perl ถูกสร้างขึ้นภายใต้สิ่งนั้น
สภาพแวดล้อม ไดเร็กทอรี และชื่อไฟล์จะถูกเข้ารหัส UTF-8

· Cygwin ไม่ได้เริ่มต้นตัวแปรสภาพแวดล้อม Win32 ดั้งเดิมทั้งหมด ดู
README.cygwin สำหรับการสนทนาเกี่ยวกับฟังก์ชัน "Cygwin::sync_winenv()" ที่เพิ่มเข้ามาใหม่
[perl #110190] และสำหรับลิงค์เพิ่มเติม

HP-UX

· HP-UX PA-RISC/64 รองรับ gcc-4.x . แล้ว

การแก้ไขเพื่อแก้ไขขนาดซ็อกเก็ตทำให้ชุดการทดสอบผ่าน HP-UX PA-RISC for
บิลด์ 64bitall (5.14.2)

VMS

· ลบส่วนที่ไม่จำเป็นออก แก้ไขคำเตือนคอมไพเลอร์เบ็ดเตล็ด และปิดบางส่วน
เปิดความคิดเห็นเกี่ยวกับ vms/vms.c.

· ลบเลเยอร์ sockadapt ออกจากบิลด์ VMS

· รองรับเวอร์ชัน VMS ก่อนเวอร์ชัน 7.0 และ DEC C ก่อนเวอร์ชัน 6.0 อย่างชัดเจน
ลบออก

· ตั้งแต่ Perl 5.10.1 ตัวห่อหุ้ม "stat" ที่ปลูกเองจึงไม่สามารถแยกแยะได้
ระหว่างชื่อไดเร็กทอรีที่มีขีดล่างและชื่อไฟล์ที่เหมือนกัน
มีจุดในตำแหน่งเดียวกัน (เช่น t/test_pl เป็นไดเร็กทอรีและ t/test.pl as
ไฟล์). ปัญหานี้ได้รับการแก้ไขแล้ว

· การสร้างบน VMS อนุญาตให้ชื่อของสัญลักษณ์ที่เป็นผลลัพธ์ในรหัส C สำหรับ Perl อีกต่อไป
มากกว่า 31 ตัวอักษร สัญลักษณ์เช่น
ตอนนี้สามารถสร้าง "Perl__it_was_the_best_of_times_it_was_the_worst_of_times" ได้อย่างอิสระ
โดยไม่ทำให้ตัวเชื่อมโยง VMS ยึด

GNU / Hurd

· ความล้มเหลวในการสร้างและทดสอบจำนวนมากบน GNU/Hurd ได้รับการแก้ไขด้วยคำแนะนำสำหรับ
การสร้างโมดูล DBM การตรวจจับเส้นทางการค้นหาไลบรารี และการเปิดใช้งานไฟล์ขนาดใหญ่
สนับสนุน

OpenVOS

· Perl ถูกสร้างขึ้นด้วยการลิงก์แบบไดนามิกบน OpenVOS ซึ่งเป็นเวอร์ชันขั้นต่ำที่รองรับของ
ซึ่งตอนนี้เป็นรุ่น 17.1.0

SunOS

คอมไพเลอร์ CC เวิร์กชอป C++ ตรวจพบและใช้งานบนระบบที่จัดส่งโดยไม่มี cc

ภายใน การเปลี่ยนแปลง


· การแสดงรูปแบบที่คอมไพล์แล้วจะถูกจัดเก็บผ่าน "mg_ptr" ของไฟล์ของพวกเขา
"PERL_MAGIC_fm". ก่อนหน้านี้มันถูกเก็บไว้ในบัฟเฟอร์สตริง นอกเหนือจาก "SvLEN()", the
ปลายปกติของสตริง "SvCOMPILED()" และ "SvCOMPILED_{on,off}()" มีอยู่แล้ว
เพื่อความเข้ากันได้กับโค้ด XS เท่านั้น อันแรกเป็น 0 เสมอ อีกสองไม่มี-
ปฏิบัติการ (5.14.1)

· ตัวแปรส่วนกลางบางตัวถูกทำเครื่องหมาย "const" สมาชิกในโครงสร้างล่าม
ได้รับการสั่งซื้อใหม่และ opcodes ได้รับการสั่งซื้อใหม่ op "OP_AELEMFAST" มี
ถูกแบ่งออกเป็น "OP_AELEMFAST" และ "OP_AELEMFAST_LEX"

· เมื่อล้างแฮชขององค์ประกอบ (เช่น ผ่าน undef(%h) หรือ %h=()) ฟิลด์ HvARRAY คือ
ไม่เป็นศูนย์ชั่วคราวอีกต่อไป ผู้ทำลายล้างใด ๆ ที่เรียกหาองค์ประกอบที่เป็นอิสระเห็น
องค์ประกอบที่เหลือ ดังนั้น %h=() จะกลายเป็นเหมือน "ลบ $h{$_} สำหรับคีย์ %h"

· สเกลาร์ที่คอมไพล์แล้วของ Boyer-Moore กลายเป็น PVMG และตอนนี้ตาราง Boyer-Moore จะถูกเก็บไว้
ผ่าน mg_ptr ของ "PERL_MAGIC_bm" ของพวกเขา ก่อนหน้านี้พวกเขาเป็น PVGV กับตาราง
เก็บไว้ในบัฟเฟอร์สตริง เกิน "SvLEN()" สิ่งนี้จะกำจัดสถานที่สุดท้ายที่
แกนเก็บข้อมูลเกิน "SvLEN()"

· ตรรกะแบบง่ายใน "Perl_sv_magic()" ทำให้เกิดการเปลี่ยนแปลงเล็กน้อยของพฤติกรรมสำหรับข้อผิดพลาด
กรณีที่เกี่ยวข้องกับเวทมนตร์ประเภทที่ไม่รู้จัก ก่อนหน้านี้ หาก "Perl_sv_magic()" ผ่าน a
ประเภทเวทย์มนตร์ที่ไม่รู้จักมันจะ

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
รหัสที่มีความยุ่งยากที่ไม่สมควรกับการใช้งานอาจจำเป็นต้องอัปเดต

· เพิ่ม API เพื่อเลือกว่าจะส่งออกสัญลักษณ์ XSUB หรือไม่ มากกว่า
รายละเอียดสามารถพบได้ในความคิดเห็นสำหรับการส่ง e64345f8

· ฟังก์ชัน "is_gv_magical_sv" ถูกลบและรวมเข้ากับ
"gv_fetchpvn_flags". เคยถูกเรียกเพื่อพิจารณาว่า GV ควรเป็น
autovivified ในบริบท rvalue ตอนนี้มันถูกแทนที่ด้วยแฟล็ก "GV_ADDMG" ใหม่แล้ว
(ไม่ใช่ส่วนหนึ่งของ API)

· จุดโค้ดที่ส่งคืนมาจากฟังก์ชัน "utf8n_to_uvuni()" เมื่ออินพุตเป็น
UTF-8 ที่มีรูปแบบไม่ถูกต้อง อนุญาตให้ใช้รูปแบบที่ไม่ถูกต้อง และคำเตือน "utf8" ปิดอยู่ในขณะนี้
Unicode REPLACEMENT CHARACTER เมื่อใดก็ตามที่ความผิดปกตินั้นไม่มีการกำหนดไว้อย่างดี
สามารถคำนวณจุดรหัสได้ ก่อนหน้านี้มูลค่าที่ส่งคืนนั้นเป็นขยะ
ความผิดปกติเพียงอย่างเดียวที่มีค่าที่กำหนดไว้อย่างดีคือสตริงที่มีความยาวเป็นศูนย์ (0 is
การส่งคืน) และลำดับ UTF-8 ที่ยาวเกินไป

· รายการ Padlists ถูกทำเครื่องหมายเป็น "AvREAL"; กล่าวคือนับการอ้างอิง พวกเขาได้รับเสมอ
นับอ้างอิงแต่ไม่ได้ทำเครื่องหมายว่าจริงเพราะ แผ่น.c ได้ทำความสะอาดตัวเอง
แทนที่จะใช้รหัสล้างตามปกติใน เอสวีซี. ที่ทำให้เกิดปัญหาในเธรด
การโคลน ดังนั้นตอนนี้แฟล็ก "AvREAL" เปิดอยู่ แต่ถูกปิดใน แผ่น.c ก่อน
padlist เป็นอิสระ (หลัง แผ่น.c ได้ทำให้อิสระของแผ่นอิเล็กโทรดแบบกำหนดเอง)

· ไฟล์ C ทั้งหมดที่ประกอบเป็น Perl core ได้ถูกแปลงเป็น UTF-8 แล้ว

· มีการเพิ่มฟังก์ชันใหม่เหล่านี้เป็นส่วนหนึ่งของงานกับสัญลักษณ์ Unicode:

ฮวีนาเมเลน
HvNAMEUTF8
Hvอีนาเมลเลน
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
ใหม่GVgen_flags
sv_derived_from_pv
sv_derived_from_pvn
sv_derived_from_sv
sv_does_pv
sv_does_pvn
sv_does_sv
ซึ่งsig_pv
ซึ่งsig_pvn
ซึ่งsig_sv
ใหม่CONSTSUB_flags

ฟังก์ชัน gv_fetchmethod_*_flags เช่น gv_fetchmethod_flags เป็นฟังก์ชันทดลองและ
อาจมีการเปลี่ยนแปลงในอนาคต

· เพิ่มฟังก์ชันต่อไปนี้ เหล่านี้คือ ไม่ ส่วนหนึ่งของ API:

GvNAMEUTF8
Gvอีนาเมลเลน
GvENAME_HEK
ตำรวจSTASH_flags
ตำรวจSTASH_flags_set
PMopSTASH_flags
PMopSTASH_flags_set
sv_setek
HEKFARG

นอกจากนี้ยังมีมาโคร "HEKf" ที่สอดคล้องกับ "SVf" สำหรับการสอดแทรก HEK ใน
สตริงที่จัดรูปแบบ

· "sv_catpvn_flags" รับแฟล็กภายในใหม่เท่านั้น "SV_CATBYTES" และ
"SV_CATUTF8" ซึ่งบอกว่าอาร์เรย์ถ่านที่จะต่อเป็น UTF8 หรือไม่ นี้
ช่วยให้การต่อข้อมูลมีประสิทธิภาพมากกว่าการสร้าง SV ชั่วคราวเพื่อส่งผ่านไปยัง
"sv_catsv".

· สำหรับ XS AUTOLOAD subs $AUTOLOAD ถูกตั้งค่าอีกครั้ง เหมือนใน 5.6.0 นี่คือใน
นอกเหนือจากการตั้งค่า "SvPVX(cv)" เพื่อให้เข้ากันได้กับ 5.8 ถึง 5.14 ดู "การโหลดอัตโนมัติ
ด้วย XSUBs" ในภาษา Perlguts

· Perl จะตรวจสอบว่าอาร์เรย์ (isa เชิงเส้น) ที่ส่งกลับโดยปลั๊กอิน MRO เริ่มต้นขึ้นหรือไม่
ด้วยชื่อของคลาสเองซึ่งอาร์เรย์ถูกสร้างขึ้นแทน
สมมติว่ามันไม่ สิ่งนี้จะป้องกันไม่ให้องค์ประกอบแรกถูกข้ามระหว่าง
ค้นหาวิธีการ นอกจากนี้ยังหมายความว่า "mro::get_linear_isa" อาจส่งคืนอาร์เรย์ด้วย one
องค์ประกอบมากกว่าปลั๊กอิน MRO ที่มีให้ [perl #94306]

· "PL_curstash" ถูกนับโดยการอ้างอิงแล้ว

· ตอนนี้มีคำแนะนำชุดคุณลักษณะใน "PL_hints" ($^H) ที่การประกาศเวอร์ชันใช้
เพื่อไม่ให้ต้องโหลด คุณสมบัติ.pm. การตั้งค่าบิตคำใบ้หนึ่งระบุว่า "กำหนดเอง"
ชุดคุณลักษณะ ซึ่งหมายความว่ารายการใน "%^H" ยังคงมีผลบังคับใช้ คุณสมบัติ.pm ใช้
ที่.

มีการกำหนดมาโคร "HINT_FEATURE_MASK" ใน Perl.h พร้อมกับคำแนะนำอื่นๆ อื่น
มาโครสำหรับการตั้งค่าและการทดสอบคุณสมบัติและบันเดิลอยู่ในใหม่ คุณสมบัติ.h.
"FEATURE_IS_ENABLED" (ซึ่งได้ย้ายไปที่ คุณสมบัติ.h) จะไม่ถูกใช้ตลอด
codebase แต่มาโครเฉพาะเจาะจงมากขึ้น เช่น "FEATURE_SAY_IS_ENABLED" ที่กำหนดไว้
in คุณสมบัติ.h.

· lib/feature.pm เป็นไฟล์ที่สร้างขึ้นโดย new สร้างใหม่/feature.pl สคริปต์
ซึ่งยังก่อให้เกิด คุณสมบัติ.h.

· อาร์เรย์ที่ผูกไว้ตอนนี้จะเป็น "AvREAL" เสมอ ถ้า @_ หรือ "DB::args" เสมอกัน จะเกิดใหม่
อันดับแรก เพื่อให้แน่ใจว่าเป็นเช่นนี้เสมอ

· เพิ่ม 8 ฟังก์ชันใหม่ "utf8_to_uvchr_buf()" และ "utfXNUMX_to_uvuni_buf()"
สิ่งเหล่านี้เหมือนกับ "utf8_to_uvchr" และ "utf8_to_uvuni" (ซึ่งตอนนี้เลิกใช้แล้ว)
แต่ใช้พารามิเตอร์พิเศษที่ใช้เพื่อป้องกันการอ่านเกินจุดสิ้นสุดของ
สตริงอินพุต ดู "utf8_to_uvchr_buf" ใน Perlapi และ "utf8_to_uvuni_buf" ใน
เพรลาปี

· เอ็นจิ้นนิพจน์ทั่วไปทำการจับคู่ที่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ของ TRIE ภายใต้ Unicode
สิ่งนี้อาจเปลี่ยนผลลัพธ์ของ "use re 'debug';" และจะทำให้สิ่งต่าง ๆ เร็วขึ้น

· มีฟังก์ชัน "wrap_op_checker()" ใหม่ ซึ่งเป็นทางเลือกที่ปลอดภัยสำหรับเธรด
เพื่อเขียนถึง "PL_check" โดยตรง

เลือก Bug แก้ไข


แถว และ กัญชา
· แก้ไขข้อผิดพลาดที่จะทำให้เกิดข้อผิดพลาด "การใช้ค่าอิสระในการวนซ้ำ" หาก
องค์ประกอบแฮชสองรายการถัดไปที่จะทำซ้ำจะถูกลบออก [perl #85026] (5.14.1)

· การลบ hash iterator ปัจจุบัน (องค์ประกอบ hash ที่จะส่งคืนโดย the
การโทรครั้งต่อไปที่ "แต่ละ") ในบริบทที่เป็นโมฆะใช้เพื่อไม่ให้ว่าง [perl #85026]

· การลบเมธอดผ่าน "delete $Class::{method}" ไวยากรณ์ที่ใช้ในการอัพเดตเมธอดแคช
ถ้าเรียกในบริบทเป็นโมฆะ แต่ไม่ใช่สเกลาร์หรือบริบทรายการ

· เมื่อองค์ประกอบแฮชถูกลบในบริบทที่เป็นโมฆะ รายการแฮชภายในจะถูกปล่อยว่าง
ก่อนที่ค่าจะเป็นอิสระ เพื่อป้องกันผู้ทำลายที่เรียกโดยผู้หลังให้พ้นจาก
เห็นแฮชในสถานะที่ไม่สอดคล้องกัน เป็นไปได้ที่จะทำให้เกิด double-free ถ้า
ตัวทำลายล้างทำให้แฮชเป็นอิสระ [perl #100340]

· การเพิ่มประสิทธิภาพ "คีย์" ใน Perl 5.12.0 เพื่อให้เร็วขึ้นในแฮชที่ว่างเปล่าทำให้เกิด "แต่ละอัน"
ไม่ต้องรีเซ็ตตัววนซ้ำหากถูกเรียกหลังจากองค์ประกอบสุดท้ายถูกลบ

· การปล่อยแฮชที่ซ้อนกันอย่างล้ำลึกจะไม่เกิดปัญหาอีกต่อไป [perl #44225]

· เป็นไปได้จากโค้ด XS เพื่อสร้างแฮชที่มีองค์ประกอบที่ไม่มีค่า ดิ
องค์ประกอบแฮชและตัวดำเนินการแบ่งส่วนที่ใช้ในการหยุดทำงานเมื่อจัดการสิ่งเหล่านี้ในบริบท lvalue
ตอนนี้พวกเขาสร้างข้อความแสดงข้อผิดพลาด "การปรับเปลี่ยนค่าแฮชที่ไม่สามารถสร้างได้"

· หากรายการกำหนดให้กับแฮชหรืออาร์เรย์ทริกเกอร์ destructors ที่ปล่อยแฮชหรือ
อาร์เรย์ตัวเอง ความผิดพลาดจะเกิดขึ้น นี่ไม่ใช่กรณีอีกต่อไป [perl #107440]

· เคยทำให้ typeglob ว่างจากอาร์เรย์หรือแฮชที่แปลเป็นภาษาท้องถิ่นได้ (เช่น "local
@{"x"}; ลบ $::{x}") ส่งผลให้เกิดข้อขัดข้องเมื่อออกจากขอบเขต

· ข้อบกพร่องหลักบางประการที่ส่งผลต่อ Hash::Util ได้รับการแก้ไขแล้ว: การล็อกองค์ประกอบแฮชที่เป็น
glob copy ไม่ทำให้การมอบหมายครั้งต่อไปเสียหาย glob (5.14.2) และ
การปลดล็อกองค์ประกอบแฮชที่มีสเกลาร์คัดลอกเมื่อเขียนไม่เป็นสาเหตุอีกต่อไป
การแก้ไขสเกลาร์นั้นเพื่อแก้ไขสเกลาร์อื่นที่ใช้สตริงเดียวกัน
buffer

C API แก้ไข
· ฟังก์ชัน "newHVhv" XS ทำงานบนแฮชที่ผูกไว้ แทนที่จะหยุดทำงานหรือย้อนกลับ
แฮชที่ว่างเปล่า

· มาโคร "SvIsCOW" C จะคืนค่าเท็จสำหรับสำเนาของ typeglobs แบบอ่านอย่างเดียว เช่น
ที่สร้างโดย:

$hash{elem} = *ฟู;
แฮช::Util::lock_value % แฮช 'องค์ประกอบ';

มันเคยกลับมาจริง

· ฟังก์ชัน "SvPVutf8" C ไม่พยายามแก้ไขอาร์กิวเมนต์อีกต่อไป ส่งผลให้เกิดข้อผิดพลาด
[เพิร์ล #108994].

· "SvPVutf8" ตอนนี้ทำงานอย่างถูกต้องกับตัวแปรเวทย์มนตร์

· ขณะนี้ "SvPVbyte" ทำงานอย่างถูกต้องที่ไม่ใช่ PV

· เมื่อนำเสนอด้วยอินพุต UTF-8 ที่มีรูปแบบไม่ถูกต้อง ฟังก์ชัน XS-callable
"is_utf8_string()", "is_utf8_string_loc()" และ "is_utf8_string_loclen()" สามารถอ่านได้
เกินจุดสิ้นสุดของสตริงอินพุตสูงสุด 12 ไบต์ สิ่งนี้จะไม่เกิดขึ้นอีกต่อไป [เพิร์ล
#32080]. อย่างไรก็ตาม ขณะนี้ "is_utf8_char()" ยังมีข้อบกพร่องนี้อยู่ ดู
"is_utf8_char()" ข้างต้น.

· ฟังก์ชัน "pregcomp" ระดับ C อาจสับสนว่ารูปแบบอยู่ใน
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]

· การสร้างบล็อก BEGIN จากโค้ด XS (ผ่าน "newXS" หรือ "newATTRSUB") จะ on
เสร็จสิ้น ให้คำใบ้ของรหัสการคอมไพล์ปัจจุบันเป็นคำแนะนำปัจจุบัน นี้
อาจทำให้คำเตือนเกิดขึ้นในขอบเขตที่ไม่เตือน

คัดลอกบนเขียน สเกลาร์
มีการแนะนำสเกลาร์คีย์การคัดลอกเมื่อเขียนหรือที่ใช้ร่วมกันใน 5.8.0 แต่โค้ด Perl ส่วนใหญ่ไม่ได้
ไม่พบพวกเขา (ส่วนใหญ่ใช้ภายใน) Perl 5.10.0 ขยายพวกเขาเช่น
การกำหนด "__PACKAGE__" หรือคีย์แฮชให้กับสเกลาร์จะทำให้เป็นสำเนาเมื่อเขียน
หลายส่วนของ Perl ไม่ได้รับการอัพเดตเพื่อรองรับส่วนเหล่านี้ แต่ตอนนี้ได้รับการแก้ไขแล้ว

· "utf8::decode" มีข้อบกพร่องที่น่ารังเกียจที่จะแก้ไขบัฟเฟอร์สตริงสเกลาร์คัดลอกเมื่อเขียน
แทน (เช่น ข้ามสำเนา) ซึ่งอาจส่งผลให้แฮชมีสององค์ประกอบ
ด้วยคีย์เดียวกัน [perl #91834] (5.14.2)

· รูทีนย่อย Lvalue ไม่อนุญาตให้สเกลาร์ COW ถูกส่งกลับ สิ่งนี้ได้รับการแก้ไขแล้วสำหรับ
lvalue บริบทสเกลาร์ใน Perl 5.12.3 และ 5.14.0 แต่บริบทรายการไม่ได้รับการแก้ไขจนกว่า
รุ่นนี้

· องค์ประกอบของแฮชที่ถูกจำกัด (ดูฟิลด์ Pragma) ที่มีค่าการคัดลอกเมื่อเขียน
ไม่สามารถลบได้ และไม่สามารถล้างแฮชดังกล่าวได้ ("%hash = ()") (5.14.2)

· การโลคัลไลซ์ตัวแปรที่ผูกไว้ใช้เพื่อทำให้เป็นแบบอ่านอย่างเดียวหากมีการคัดลอกเมื่อเขียน
สตริง (5.14.2)

· การกำหนดสตริงการคัดลอกเมื่อเขียนให้กับองค์ประกอบ stash จะไม่ทำให้เกิด double free อีกต่อไป
โดยไม่คำนึงถึงการเปลี่ยนแปลงนี้ ผลลัพธ์ของการมอบหมายดังกล่าวยังไม่ได้กำหนดไว้

· การกำหนดสตริงการคัดลอกเมื่อเขียนให้กับตัวแปรที่ผูกไว้จะไม่หยุดตัวแปรนั้นจาก .อีกต่อไป
เสมอกันหากเกิดขึ้นเป็น PVMG หรือ PVLV ภายใน

· ทำการแทนที่ตัวแปรที่ผูกไว้โดยส่งคืนสเกลาร์ copy-on-write ที่ใช้ทำให้เกิด
การยืนยันล้มเหลวหรือคำเตือน "พยายามปลดปล่อยสตริงที่ใช้ร่วมกันที่ไม่มีอยู่"

· อันนี้เป็นการถดถอยจาก 5.12: ใน 5.14.0 ตัวดำเนินการกำหนดระดับบิต "|=",
"^=" และ "&=" เริ่มออกจากด้านซ้ายมือโดยไม่ได้กำหนดไว้หากเกิดเป็น a
สตริงคัดลอกเมื่อเขียน [perl #108480]

· Storable, Devel::Peek และ PerlIO::scalar มีปัญหาคล้ายกัน ดู "โมดูลที่อัปเดต
และ Pragmata" ข้างต้น

การขอ ดีบัก
· dumpvar.plดังนั้นคำสั่ง "x" ในดีบักเกอร์จึงได้รับการแก้ไขเพื่อจัดการ
วัตถุมงคลในชั้นเรียนที่มีชื่อประกอบด้วย "=" เนื้อหาของวัตถุดังกล่าว
ไม่เคยถูกทิ้ง [perl #101814]

· คำสั่ง "R" สำหรับการรีสตาร์ทเซสชันดีบักเกอร์ได้รับการแก้ไขให้ทำงานบน Windows
หรือระบบอื่นที่ไม่มีค่าคงที่ "POSIX::_SC_OPEN_MAX" [perl #87740]

· คำสั่ง "#line 42 foo" ใช้เพื่อไม่อัปเดตอาร์เรย์ของบรรทัดที่ใช้โดย
ดีบักเกอร์ถ้ามันเกิดขึ้นใน eval สตริง สิ่งนี้ได้รับการแก้ไขแล้วบางส่วนใน 5.14 แต่มัน
ใช้ได้กับ "#line 42 foo" เดียวในแต่ละ eval ตอนนี้ใช้งานได้หลายแบบ

· เมื่อการเรียกรูทีนย่อยถูกดักฟังโดยดีบักเกอร์ ชื่อของรูทีนย่อยหรือa
การอ้างอิงจะถูกเก็บไว้ใน $DB::sub เพื่อให้ดีบักเกอร์เข้าถึงได้ บางครั้ง (เช่น
"$foo = *bar; undef *bar; &$foo") $DB::sub จะถูกตั้งค่าเป็นชื่อที่ไม่สามารถ
ใช้เพื่อค้นหารูทีนย่อย ดังนั้นความพยายามของดีบั๊กที่จะเรียกรูทีนย่อยจึงล้มเหลว ตอนนี้
การตรวจสอบเพื่อดูว่าจำเป็นต้องมีการอ้างอิงที่มีประสิทธิภาพมากขึ้นดังนั้นปัญหาเหล่านั้น
ไม่ควรเกิดขึ้นอีกต่อไป [rt.cpan.org #69862]

· ทุกรูทีนย่อยมีชื่อไฟล์ที่เชื่อมโยงกับมันซึ่งดีบักเกอร์ใช้ หนึ่ง
เกี่ยวข้องกับรูทีนย่อยคงที่ที่เคยถูกจัดสรรผิดเมื่อโคลนภายใต้
กระทู้ ดังนั้นการดีบักแอปพลิเคชันเธรดอาจส่งผลให้หน่วยความจำ
การทุจริต [perl #96126]

การอ้างอิง ผู้ประกอบการ
· "defined(${"..."})", "defined(*{"..."})" ฯลฯ ใช้เพื่อคืนค่าจริงสำหรับส่วนใหญ่ แต่ไม่ใช่
ตัวแปรบิวท์อินทั้งหมด ถ้ายังไม่ได้ใช้งาน ข้อผิดพลาดนี้ได้รับผลกระทบ
"${^GLOBAL_PHASE}" และ "${^UTF8CACHE}" และอื่นๆ อีกมากมาย นอกจากนี้ยังใช้เพื่อคืนค่าเท็จ if
ชื่อแพ็คเกจก็ได้รับเช่นกัน ("${"::!"}") [perl #97978, #97492]

· Perl 5.10.0 แนะนำจุดบกพร่องที่คล้ายกัน: "defined(*{"foo"})" โดยที่ "foo" แสดงถึง
ชื่อของตัวแปรส่วนกลางในตัวที่ใช้เพื่อคืนค่าเท็จหากตัวแปรไม่เคยเป็น
เคยใช้แต่เฉพาะบน เป็นครั้งแรก เรียก. สิ่งนี้ก็ได้รับการแก้ไขเช่นกัน

· ตั้งแต่ 5.6.0 เป็นต้นไป "*{ ... }" มีความไม่สม่ำเสมอในการดำเนินการกับค่าที่ไม่ได้กำหนดไว้ มัน
จะตายในโหมดเข้มงวดหรือบริบท lvalue สำหรับค่าที่ไม่ได้กำหนดส่วนใหญ่ แต่จะ
ถือเป็นสตริงว่าง (พร้อมคำเตือน) สำหรับการส่งคืนสเกลาร์โดย
"undef()" (&PL_sv_undef ภายใน) สิ่งนี้ได้รับการแก้ไขแล้ว ตอนนี้ "undef()"
ปฏิบัติเหมือนสเกลาร์ที่ไม่ได้กำหนดอื่น ๆ เช่นเดียวกับใน Perl 5.005

แฟ้มจัดการ เข้าถึงล่าสุด
Perl มีตัวแปรภายในที่เก็บ filehandle ล่าสุดที่จะเข้าถึงได้ มันถูกใช้
โดย $ และโดย "บอก" และ "อ๊อฟ" โดยไม่มีข้อโต้แย้ง

· เคยเป็นไปได้ที่จะตั้งค่าตัวแปรภายในนี้เป็นสำเนา glob แล้วแก้ไข
glob นั้นเป็นอย่างอื่นที่ไม่ใช่ glob และยังคงมีการเข้าถึงล่าสุด
filehandle ที่เชื่อมโยงกับตัวแปรหลังจากกำหนด glob ให้กับมันอีกครั้ง:

$foo ของฉัน = *STDOUT; # $foo เป็นสำเนาทั่วโลก
<$foo>; # $foo เป็นหมายเลขอ้างอิงที่เข้าถึงล่าสุด
$foo = 3; #ไม่ใช่โลกอีกต่อไป
$foo = *STDERR; # ยังคงเป็นที่จับที่เข้าถึงได้ล่าสุด

ตอนนี้การกำหนด "$foo = 3" จะยกเลิกการตั้งค่าตัวแปรภายในนั้น ดังนั้นจึงไม่มีค่าสุดท้าย-
เข้าถึง filehandle ราวกับว่า "<$foo>" ไม่เคยเกิดขึ้น

นอกจากนี้ยังป้องกันไม่ให้หมายเลขอ้างอิงที่ไม่เกี่ยวข้องกลายเป็นหมายเลขอ้างอิงที่เข้าถึงล่าสุด if
$foo อยู่นอกขอบเขตและมีการใช้ SV ภายในเดียวกันสำหรับแฮนเดิลอื่น [perl
#97988].

· การถดถอยใน 5.14 ทำให้คำสั่งเหล่านี้ไม่ได้ตั้งค่าตัวแปรภายในนั้น:

$fh ของฉัน = *STDOUT;
บอก $fh;
อ๊อฟ $fh;
หา $fh, 0,0;
บอก *$fh;
อ๊อฟ *$fh;
ค้นหา *$fh, 0,0;
อ่านบรรทัด *$fh;

ตอนนี้ได้รับการแก้ไขแล้ว แต่ "tell *{ *$fh }" ยังคงมีปัญหาอยู่ และไม่ชัดเจนว่าเป็นอย่างไร
เพื่อแก้ไข [perl #106536]

การทดสอบไฟล์ และ "สถิติ"
คำว่า "filetests" หมายถึงตัวดำเนินการที่ประกอบด้วยยัติภังค์ตามด้วยตัวเดียว
ตัวอักษร: "-r", "-x", "-M" เป็นต้น คำว่า "stacked" เมื่อนำไปใช้กับ filetests หมายถึง
ตามด้วยตัวดำเนินการ filetest อื่นที่แชร์ตัวถูกดำเนินการเดียวกัน เช่นเดียวกับใน "-r -x -w $fooo"

· "สถิติ" สร้างคำเตือนที่สอดคล้องกันมากขึ้น ไม่เตือนสำหรับ "_" อีกต่อไป [perl #71002]
และไม่ข้ามคำเตือนในบางครั้งสำหรับแฮนเดิลอื่นๆ ที่ไม่ได้เปิดอีกต่อไป ไม่มีแล้ว
เตือนเกี่ยวกับหมายเลขอ้างอิงที่ไม่ได้เปิดเมื่อฟังก์ชัน "fstat" ของระบบปฏิบัติการล้มเหลว

· "สถิติ" บางครั้งจะส่งกลับตัวเลขติดลบสำหรับจำนวนไอโหนดขนาดใหญ่เพราะเป็น
ใช้ประเภท C ภายในที่ไม่ถูกต้อง [เพิร์ล #84590]

· "lstat" ถูกบันทึกไว้เพื่อถอยกลับไปเป็น "stat" (พร้อมคำเตือน) เมื่อได้รับ filehandle
เมื่อผ่านการอ้างอิง IO จริง ๆ แล้วมันทำเทียบเท่ากับ "stat _" และ
ละเลยที่จับ

· "-T _" ที่ไม่มี "stat" นำหน้าใช้สร้างคำเตือน "ไม่ได้กำหนดค่าเริ่มต้น" ที่สับสน
แม้ว่าจะไม่เห็นคุณค่าที่ยังไม่ได้เริ่มต้นที่จะพูดถึงก็ตาม

· "-T", "-B", "-l" และ "-t" ตอนนี้ทำงานเมื่อซ้อนกับตัวดำเนินการ filetest อื่น ๆ [perl
#77388].

· ใน 5.14.0 filetest ops ("-r", "-x" เป็นต้น) เริ่มเรียก FETCH ด้วยอาร์กิวเมนต์ที่ผูกไว้
เป็นของอาร์กิวเมนต์ก่อนหน้าของโอเปอเรเตอร์รายการ ถ้าถูกเรียกด้วยคำเปล่า
อาร์กิวเมนต์หรือไม่มีอาร์กิวเมนต์เลย สิ่งนี้ได้รับการแก้ไขแล้ว ดังนั้น "push @foo, $tied, -r" no
เรียก FETCH ที่ $tied นานขึ้น

· ใน Perl 5.6 "-l" ตามด้วยสิ่งอื่นที่ไม่ใช่คำเปล่าจะถือว่าข้อโต้แย้งของมัน
เป็นชื่อไฟล์ ที่มีการเปลี่ยนแปลงใน 5.8 สำหรับการอ้างอิง glob ("\*foo") แต่ไม่ใช่สำหรับ
globs เอง (*foo) "-l" เริ่มส่งคืน "undef" สำหรับการอ้างอิง glob โดยไม่มี
การตั้งค่าบัฟเฟอร์สถิติสุดท้ายที่หมายเลขอ้างอิง "_" ใช้ แต่ถ้าคำเตือนเป็น
เปิด. เมื่อปิดคำเตือน มันก็เหมือนกับ 5.6 พูดง่ายๆ ก็คือ
บั๊กกี้และไม่สอดคล้องกัน ตอนนี้พฤติกรรม 5.6 ได้รับการฟื้นฟูแล้ว

· "-l" ตามด้วยคำเปล่า "กิน" อาร์กิวเมนต์ก่อนหน้าในรายการอีกต่อไป
โอเปอเรเตอร์ที่อยู่ในรายการอาร์กิวเมนต์ ดังนั้น "พิมพ์ "bar", -l foo" ตอนนี้จริงๆ
พิมพ์ "bar" เพราะ "-l" กินนานขึ้น

· Perl เก็บตัวแปรภายในไว้หลายตัวเพื่อติดตามบัฟเฟอร์สถิติล่าสุด จาก
ไฟล์ใด (จัดการ) ที่มันเกิดขึ้น มันเป็นประเภทใดและสถานะสุดท้ายหรือไม่
ที่ประสบความสำเร็จ.

มีหลายกรณีที่สิ่งเหล่านี้ไม่ตรงกัน ส่งผลให้ไม่สอดคล้องกัน
หรือพฤติกรรมเอาแน่เอานอนไม่ได้ในกรณีขอบ (ทุกการกล่าวถึง "-T" ใช้กับ "-B" ด้วย):

· "-T ด้ามจับ"แม้ว่าจะเป็น "สถิติ" แต่ก็ไม่ได้รีเซ็ตประเภทสถิติล่าสุด
ดังนั้น "lstat _" ที่ตามมาก็จะส่งกลับผลลัพธ์ที่ไม่ถูกต้อง นอกจากนี้ยังเป็น
ไม่ได้กำหนดสถานะความสำเร็จ

· การปล่อยแฮนเดิลที่ใช้ล่าสุดโดย "stat" หรือการทดสอบไฟล์อาจส่งผลให้ "-T _" ใช้
ที่จับที่ไม่เกี่ยวข้อง

· "stat" ที่มีการอ้างอิง IO จะไม่รีเซ็ตประเภทสถิติหรือบันทึก filehandle
สำหรับ "-T _" ที่จะใช้

· คำเตือนที่ร้ายแรงอาจทำให้บัฟเฟอร์สถิติไม่ถูกรีเซ็ตสำหรับผู้ดำเนินการทดสอบไฟล์
บน filehandle ที่ไม่ได้เปิดหรือ "-l" บนที่จับใดก็ได้ คำเตือนร้ายแรงก็หยุด "-T"
จากการตั้งค่า $!.

· เมื่อสถิติล่าสุดอยู่ในไฟล์ที่อ่านไม่ได้ "-T _" ควรจะส่งคืน
"undef" โดยปล่อยให้บัฟเฟอร์สถิติสุดท้ายไม่เปลี่ยนแปลง แต่มันเป็นการตั้งค่าสถานะ
พิมพ์ทำให้ "lstat _" หยุดทำงาน

· "-T ชื่อไฟล์" ไม่ได้รีเซ็ตบัฟเฟอร์สถิติภายในสำหรับไฟล์ที่อ่านไม่ได้

สิ่งเหล่านี้ได้รับการแก้ไขแล้ว

รูปแบบ
· ขอบหลายกรณีได้รับการแก้ไขด้วยรูปแบบและ "formline"; โดยเฉพาะที่
ตัวรูปแบบเองก็อาจแปรผันได้ (เช่น ความสัมพันธ์และการโอเวอร์โหลด) และ
โดยที่รูปแบบและข้อมูลต่างกันในการเข้ารหัส ในทั้งสองกรณีนี้ มันเคย
เป็นไปได้ที่ผลลัพธ์จะเสียหาย [perl #91032]

· "formline" จะไม่แปลงอาร์กิวเมนต์เป็นสตริงแทนที่อีกต่อไป เลยผ่าน
การอ้างอิงถึง "formline" จะไม่ทำลายข้อมูลอ้างอิงอีกต่อไป [perl #79532]

· มอบหมายให้ $^A (ตัวสะสมเอาต์พุตรูปแบบ) ตอนนี้จะคำนวณจำนวนบรรทัดใหม่
เอาท์พุต

"ที่ให้ไว้" และ "เมื่อไร"
· "given" ไม่ได้กำหนดขอบเขตโดยนัยของ $_ อย่างถูกต้อง ส่งผลให้หน่วยความจำรั่วหรือ
คำเตือน "ตัวแปรไม่พร้อมใช้งาน" [perl #94682]

· "given" ไม่ได้เรียก set-magic บน lexical $_ ที่ใช้โดยปริยาย นี้
หมายความเช่นว่า "pos" จะถูกจดจำจากการดำเนินการเดียวกัน
"ให้" บล็อกถัดไป แม้ว่าอินพุตจะเป็นตัวแปรอื่น [perl #84526]

· บล็อก "เมื่อ" ในตอนนี้สามารถส่งคืนตัวแปรที่ประกาศอยู่ภายในไฟล์ที่ปิดล้อมได้
บล็อก "ให้" [perl #93548]

การขอ "ลูกโลก" ผู้ประกอบการ
· บนระบบปฏิบัติการอื่นที่ไม่ใช่ VMS ตัวดำเนินการ "glob" ของ Perl (และรูปแบบ "<...>") ให้ใช้ File::Glob
ภายใต้. File::Glob แบ่งรูปแบบออกเป็นคำ ก่อนป้อนแต่ละคำเป็นของมัน
ฟังก์ชัน "bsd_glob"

มีความไม่สอดคล้องกันหลายประการในวิธีการแยก ตอนนี้เครื่องหมายคำพูด
(' และ ") ถือเป็นตัวคั่นคำในรูปแบบเชลล์เสมอ (ซึ่งอนุญาตให้เว้นวรรคเป็น
ส่วนหนึ่งของคำ) และแบ็กสแลชจะถูกเก็บไว้เสมอ เว้นแต่จะมีอยู่เพื่อหลบหนี
อัญประกาศ. เมื่อก่อนนั้นก็จะเป็นบางครั้งเท่านั้น ขึ้นอยู่กับว่า
รูปแบบมีช่องว่าง เว้นช่องว่างที่ส่วนท้ายของรูปแบบด้วย
ไม่ถูกปล้นอีกต่อไป [perl #40470]

· "CORE::glob" ตอนนี้ทำงานเป็นวิธีเรียกฟังก์ชัน globbing เริ่มต้น มันเคย
เคารพแทนที่แม้จะมีคำนำหน้า "CORE::"

· ภายใต้ miniperl (ใช้เพื่อกำหนดค่าโมดูลเมื่อสร้าง Perl เอง), "glob" ตอนนี้
ล้าง %ENV ก่อนเรียก csh เนื่องจากตัวหลังบ่นในบางระบบถ้าไม่
เช่นเดียวกับเนื้อหาของตัวแปรสภาพแวดล้อม LS_COLORS [perl #98662]

ค่า ซับรูทีน
· Explicit return ส่งคืนอาร์กิวเมนต์จริงที่ส่งกลับมา แทนที่จะคัดลอก
มัน [perl #72724, #72706]

· รูทีนย่อย Lvalue ใช้เพื่อบังคับใช้ไวยากรณ์ lvalue (เช่น อะไรก็ตามที่อยู่ทางซ้าย-
ข้างมือของ "=") สำหรับคำสั่งสุดท้ายและอาร์กิวเมนต์ที่ส่งคืน ตั้งแต่ lvalue
รูทีนย่อยไม่ได้ถูกเรียกในบริบท lvalue เสมอไป การจำกัดนี้ถูกยกเลิกแล้ว

· รูทีนย่อย Lvalue มีข้อจำกัดน้อยกว่าเกี่ยวกับค่าที่สามารถส่งคืนได้ มันเคย
บ่นกับค่าที่ส่งคืนโดย "shift" และ "delete" และจากรูทีนย่อยอื่น ๆ แต่ไม่มี
อีกต่อไป [perl #71172]

· รูทีนย่อย lvalue ว่าง ("sub :lvalue {}") ใช้เพื่อส่งคืน @_ ในบริบทรายการ ทั้งหมด
รูทีนย่อยเคยทำเช่นนี้ แต่รูทีนย่อยปกติได้รับการแก้ไขใน Perl 5.8.2 ตอนนี้ lvalue
รูทีนย่อยได้รับการแก้ไขเช่นเดียวกัน

· การทำให้อัตโนมัติทำงานได้กับค่าที่ส่งคืนจากรูทีนย่อย lvalue [perl #7946] เช่น
ส่งคืน "คีย์" ในบริบท lvalue

· รูทีนย่อย Lvalue ใช้เพื่อคัดลอกค่าที่ส่งคืนในบริบท rvalue ไม่เพียงแต่เป็น
สิ่งนี้ทำให้วงจร 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()" หรือ "ของเรา ()" (เช่นใน
"$object->method(my($a,$b))") ใช้เพื่อบังคับบริบท lvalue บนรูทีนย่อย นี้
จะป้องกันวิธีการ lvalue จากการคืนค่าบางค่า

· การเรียกย่อย Lvalue ที่ไม่ได้ถูกกำหนดให้เป็นแบบนั้นในขณะคอมไพล์ (&$name หรือ
&{"name"}) จะไม่ได้รับการยกเว้นจากการอ้างอิงที่เข้มงวดอีกต่อไป หากเกิดขึ้นในคำสั่งสุดท้าย
ของรูทีนย่อย lvalue [perl #102486]

· การเรียกย่อยซึ่งไม่สามารถมองเห็นการย่อยได้ในเวลารวบรวม หากเกิดขึ้นในช่วงสุดท้าย
คำสั่งของรูทีนย่อย lvalue จะปฏิเสธรูทีนย่อยที่ไม่ใช่ lvalue และตายด้วย
"ไม่สามารถแก้ไขการเรียกรูทีนย่อยที่ไม่ใช่ lvalue" [perl #102486]

การเรียกย่อยที่ไม่ใช่ lvalue ที่มี subs เป็น มองเห็นได้ในเวลารวบรวมแสดงตรงกันข้าม
ข้อผิดพลาด หากการเรียกเกิดขึ้นในคำสั่งสุดท้ายของรูทีนย่อย lvalue จะมี
จะไม่มีข้อผิดพลาดเมื่อมีการเรียกย่อย lvalue ในบริบท lvalue Perl จะสุ่มสี่สุ่มห้า
กำหนดค่าชั่วคราวที่ส่งคืนโดยรูทีนย่อยที่ไม่ใช่ lvalue

· รูทีน "AUTOLOAD" ใช้เพื่อมีความสำคัญเหนือกว่าการเรียกย่อยจริง (เช่น
เมื่อไม่ต้องการการโหลดอัตโนมัติ) สำหรับการเรียกย่อยใน lvalue หรือบริบท lvalue ที่เป็นไปได้
หากมองไม่เห็นรูทีนย่อยในเวลาคอมไพล์

· การใช้แอตทริบิวต์ ":lvalue" กับ XSUB หรือรูทีนย่อยที่มีนามแฝงด้วย "sub
foo :lvalue;" ไวยากรณ์หยุดทำงานใน Perl 5.12 สิ่งนี้ได้รับการแก้ไขแล้ว

· การใช้แอตทริบิวต์ :lvalue กับรูทีนย่อยที่กำหนดไว้แล้วไม่ได้ผล
อย่างถูกต้อง เนื่องจากแอตทริบิวต์จะเปลี่ยนวิธีการคอมไพล์ย่อย ดังนั้น Perl 5.12
เริ่มเตือนเมื่อมีการพยายามใช้แอตทริบิวต์กับที่กำหนดไว้แล้ว
ย่อย ในกรณีดังกล่าว คุณลักษณะนี้จะถูกยกเลิก

แต่การเปลี่ยนแปลงใน 5.12 พลาดกรณีที่แอตทริบิวต์ที่กำหนดเองมีอยู่: that
กรณียังคงใช้แอตทริบิวต์อย่างเงียบ ๆ และไม่มีประสิทธิภาพ ที่ละเลยได้ในขณะนี้
ได้รับการแก้ไข "sub foo :lvalue :Whatever" (เมื่อ "foo" ถูกกำหนดไว้แล้ว) จะเตือน
เกี่ยวกับแอตทริบิวต์ :lvalue และไม่ใช้

· ข้อบกพร่องที่ส่งผลต่อการเผยแพร่บริบท lvalue ผ่านการเรียกรูทีนย่อย lvalue ที่ซ้อนกัน has
ได้รับการแก้ไข ก่อนหน้านี้ การคืนค่าในบริบท rvalue ที่ซ้อนกันจะได้รับการปฏิบัติ
เป็นบริบท lvalue โดยการเรียกรูทีนย่อยภายใน ส่งผลให้ค่าบางค่า (เช่น
ค่าแบบอ่านอย่างเดียว) ถูกปฏิเสธ

โอเวอร์โหลด
· การกำหนดเลขคณิต ("$left += $right") ที่เกี่ยวข้องกับอ็อบเจกต์โอเวอร์โหลดซึ่งอาศัย
การแทนที่ 'nomethod' ไม่มี segfault อีกต่อไปเมื่อตัวถูกดำเนินการด้านซ้ายไม่ได้โอเวอร์โหลด

· ข้อผิดพลาดที่เกิดขึ้นเมื่อไม่พบวิธีการในระหว่างการโอเวอร์โหลด กล่าวถึง
ชื่อแพ็คเกจถูกต้อง เหมือนที่ทำใน 5.8.x แทนที่จะพูดถึง
แพ็คเกจ "โอเวอร์โหลด" เนื่องจากมีตั้งแต่ 5.10.0

· Undefining %overload:: ไม่ทำให้เกิดการแครชอีกต่อไป

ต้นแบบ of built-in คำหลัก
· ฟังก์ชัน "ต้นแบบ" จะไม่ตายสำหรับ "__FILE__", "__LINE__" และ
คำสั่ง "__PACKAGE__" ตอนนี้มันส่งคืนต้นแบบสตริงว่างสำหรับพวกเขาเพราะ
พวกมันแยกไม่ออกจากฟังก์ชันที่เป็นโมฆะเช่น "เวลา" ทางวากยสัมพันธ์

· "prototype" จะคืนค่า "undef" สำหรับตัวดำเนินการ infix ที่ลบล้างได้ทั้งหมด เช่น "eq"
ซึ่งไม่สามารถเรียกใช้งานได้ในลักษณะที่คล้ายคลึงกันแต่อย่างใด มันเคยส่งคืนที่ไม่ถูกต้อง
ต้นแบบสำหรับบางคนและตายเพื่อคนอื่น [perl #94984]

· ต้นแบบของฟังก์ชันในตัวหลายอย่าง -- "getprotobynumber", "lock", "not" และ
"เลือก" - ได้รับการแก้ไขแล้วหรืออย่างน้อยก็ใกล้เคียงกับความเป็นจริงมากขึ้นกว่าเดิม

ปกติ การแสดงออก
· "/[[:ascii:]]/" และ "/[[:blank:]]/" ใช้กฎสถานที่ภายใต้ "ใช้สถานที่" เมื่อ
แพลตฟอร์มรองรับสิ่งนั้น ก่อนหน้านี้ พวกเขาใช้ชุดอักขระดั้งเดิมของแพลตฟอร์ม

· "m/[[:ascii:]]/i" และ "/\p{ASCII}/i" ตรงกันแล้ว (เมื่อไม่แตกต่างกัน
สถานที่) สิ่งนี้แก้ไขการถดถอยที่นำมาใช้ใน 5.14 ซึ่งนิพจน์แรก
สามารถจับคู่อักขระนอก ASCII เช่น KELVIN SIGN

· "/.*/g" บางครั้งอาจปฏิเสธที่จะจับคู่ที่ส่วนท้ายของสตริงที่ลงท้ายด้วย "\n"
สิ่งนี้ได้รับการแก้ไขแล้ว [perl #109206]

· เริ่มต้นด้วย 5.12.0 Perl เคยทำให้การทำบัญชีภายในยุ่งเหยิงขึ้นหลังจาก
กำหนด "${ qr// }" ให้กับองค์ประกอบแฮชและล็อกด้วย Hash::Util นี้สามารถ
ส่งผลให้เกิดการหลุดสองครั้ง เกิดปัญหา หรือพฤติกรรมเอาแน่เอานอนไม่ได้

· ตัวแก้ไขนิพจน์ทั่วไปใหม่ (ใน 5.14.0) "/a" เมื่อทำซ้ำเช่น "/aa" ห้าม
อักขระที่อยู่นอกช่วง ASCII ที่ตรงกับอักขระภายในช่วงนั้นจาก
จับคู่ภายใต้ "/i" สิ่งนี้ไม่ได้ผลในบางกรณี ทั้งหมดเกี่ยวข้องกับ
สลับกัน เช่น

"\N{KELVIN SIGN}" =~ /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, อักษรตัวเล็กกรีก
IOTA กับ DIALYTIKA และ TONOS, UPSILON ตัวพิมพ์เล็กกรีกพร้อม DIALYTIKA และ OXIA
UPSILON ตัวพิมพ์เล็กกรีกพร้อม DIALYTIKA และ TONOS, LATIN Small LETTER LONG S, LATIN
SMALL LIGATURE LONG ST และ LATIN SMALL LIGATURE ST.

· มีการถดถอยของหน่วยความจำรั่วในคอมไพล์นิพจน์ทั่วไปภายใต้เธรดที่ได้รับ
คงที่

· แก้ไขการถดถอยใน 5.14.0 แล้ว สิ่งนี้เกี่ยวข้องกับวงเล็บคว่ำ
คลาสอักขระในนิพจน์ทั่วไปที่ประกอบด้วยคุณสมบัติ Unicode เพียงอย่างเดียว
คุณสมบัตินั้นไม่ได้กลับด้านนอกช่วง Latin1

· ตอนนี้อักขระ Unicode ที่มีปัญหาสามตัวทำงานได้ดีขึ้นในการจับคู่รูปแบบ regex ภายใต้
"/ผม".

ในอดีต อักขระ Unicode สามตัว: LATIN SMALL LETTER SHARP S, GREEK SMALL LETTER
IOTA กับ DIALYTIKA และ TONOS และ UPSILON ตัวพิมพ์เล็กกรีกพร้อม DIALYTIKA และ
TONOS พร้อมกับลำดับที่พวกเขาพับ (รวมถึง "ss" สำหรับ LATIN SMALL
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: เอ็นจิ้น regex มีหน่วยความจำรั่วเมื่อเข้าถึงชื่อที่จับภาพนั้น
ไม่จับคู่เป็นส่วนหนึ่งของ regex นับตั้งแต่ 5.10 เมื่อมีการแนะนำ เช่น,
สิ่งนี้จะใช้หน่วยความจำมากกว่าร้อย MB:

สำหรับ (1..10_000_000) {
ถ้า ("foo" =~ /(foo|(? บาร์))?/) {
$capture ของฉัน = $+{capture}
}
}
ระบบ "ps -o rss $$"'

· ใน 5.14 "/[[:lower:]]/i" และ "/[[:upper:]]/i" ไม่ตรงกับกรณีตรงข้ามอีกต่อไป
สิ่งนี้ได้รับการแก้ไขแล้ว [perl #101970]

· นิพจน์ทั่วไปจับคู่กับวัตถุโอเวอร์โหลดทางด้านขวามือจะ
บางครั้งทำให้วัตถุตึงหลายครั้งเกินไป

· แก้ไขการถดถอยที่นำมาใช้ใน 5.14 ในนิพจน์ทั่วไป "/i"
การจับคู่ ซึ่งการจับคู่ล้มเหลวอย่างไม่เหมาะสมหากรูปแบบอยู่ใน UTF-8 เป้าหมาย
ไม่ใช่สตริง และอักขระละติน-1 นำหน้าอักขระในสตริงที่ควรจะ
ตรงกับรูปแบบ [เพิร์ล #101710]

· ในการจับคู่รูปแบบนิพจน์ทั่วไปที่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ จะไม่มีการเข้ารหัส UTF-8 อีกต่อไป
สตริงที่สแกนเพื่อเริ่มการแข่งขันจะดูที่ตำแหน่งแรกที่เป็นไปได้เท่านั้น
ซึ่งทำให้การจับคู่เช่น ""f\x{FB00}" =~ /ff/i" ล้มเหลว

· ตัวเพิ่มประสิทธิภาพ regexp จะไม่เกิดปัญหาในการดีบักบิลด์อีกต่อไปเมื่อรวมสายคงที่
โหนดที่มีเนื้อหาที่ไม่สะดวก

· ความตื่นตระหนกที่เกี่ยวข้องกับการรวมกันของตัวดัดแปลงนิพจน์ทั่วไป "/aa" และ
ลำดับหลีก "\b" ที่นำมาใช้ใน 5.14.0 ได้รับการแก้ไขแล้ว [perl #95964] (5.14.2)

· การรวมกันของตัวแก้ไขนิพจน์ทั่วไป "/aa" และ "\b" และ "\B" หนี
ลำดับทำงานไม่ถูกต้องในสตริงที่เข้ารหัส UTF-8 อักขระที่ไม่ใช่ ASCII ทั้งหมด
ภายใต้ "/aa" ควรถือเป็นอักขระที่ไม่ใช่คำ แต่สิ่งที่เกิดขึ้นคือ
กฎ Unicode ใช้เพื่อกำหนดคำ/ไม่ใช่คำสำหรับอักขระที่ไม่ใช่ ASCII
สิ่งนี้ได้รับการแก้ไขแล้ว [perl #95968]

· "(?foo: ...)" ไม่สูญเสียผ่านชุดอักขระอีกต่อไป

· การปรับให้เหมาะสมที่สุดเคยมีปัญหากับการสลับที่ประกอบด้วยช่องว่าง
"(?:)" ทำให้ ""x" =~ /\A(?>(?:(?:)A|B|C?x))\z/" ไม่ตรงกัน ในขณะที่ควร
[เพิร์ล #111842].

· การใช้ตัวแปรคำศัพท์ ("ของฉัน") ในบล็อคโค้ดที่ฝังอยู่ในนิพจน์ทั่วไปจะไม่
ส่งผลให้หน่วยความจำเสียหายหรือขัดข้องนานขึ้น

อย่างไรก็ตาม โค้ดบล็อคเหล่านี้ยังอยู่ในช่วงทดลอง เนื่องจากยังมีปัญหาอยู่
โดยมีการปิดตัวแปรที่ไม่ถูกต้อง (เช่น วนซ้ำ) และผิดปกติ
ออก (เช่น "ตาย") ทำให้หน่วยความจำเสียหาย

· อักขระเมตานิพจน์ทั่วไป "\h", "\H", "\v" และ "\V" ที่ใช้ทำให้เกิดความตื่นตระหนก
ข้อความแสดงข้อผิดพลาดเมื่อพยายามจับคู่ที่ส่วนท้ายของสตริง [perl #96354]

· ตัวย่อของอักขระควบคุม C1 สี่ตัว "MW" "PM", "RI" และ "ST" คือ
ก่อนหน้านี้ไม่รู้จักโดย "\N{}" ชื่อ ()และ string_vianame().

· การกล่าวถึงตัวแปรชื่อ "&" นอกเหนือจาก $& (เช่น "@&" หรือ "%&") จะไม่หยุด $& อีกต่อไป
จากการทำงาน เช่นเดียวกับตัวแปรชื่อ "'" และ "`" [perl #24237]

· การสร้างย่อย "UNIVERSAL::AUTOLOAD" จะไม่หยุด "%+", "%-" และ "%!" อีกต่อไป จากการทำงาน
บางครั้ง [perl #105024]

การจับคู่อัจฉริยะ
· "~~" ตอนนี้จัดการลำดับความสำคัญของ Any~~Object อย่างถูกต้องและไม่ถูกหลอกโดย
โอเวอร์โหลดวัตถุทางด้านซ้ายมือ

· ใน Perl 5.14.0 "$tainted ~~ @array" หยุดทำงานอย่างถูกต้อง บางครั้งก็
ล้มเหลวอย่างผิดพลาด (เมื่อ $tainted มีสตริงที่เกิดขึ้นใน array หลังจาก
องค์ประกอบแรก) หรือสำเร็จอย่างผิดพลาด (เมื่อ "undef" เกิดขึ้นหลังจากองค์ประกอบแรก)
[เพิร์ล #93590].

การขอ "เรียงลำดับ" ผู้ประกอบการ
· "sort" ไม่ถือว่า "sub {}" และ "sub {()}" เทียบเท่ากับเมื่อ sub นั้นถูก
ให้เป็นกิจวัตรการเปรียบเทียบ มันเคยบ่นว่า "sub {()}"

· ขณะนี้ "sort" ใช้งานได้อีกครั้งกับรูทีนการจัดเรียงแบบกำหนดเองที่เป็น XSUB มันหยุดแล้ว
ทำงานใน 5.10.0

· "sort" ที่มีค่าคงที่สำหรับรูทีนการจัดเรียงแบบกำหนดเอง แม้ว่าจะไม่ได้เรียงลำดับก็ตาม
ผลลัพธ์ไม่ขัดข้องอีกต่อไป มันเริ่มขัดข้องใน 5.10.0

· คำเตือนที่ปล่อยออกมาโดย "การเรียงลำดับ" เมื่อรูทีนการเปรียบเทียบที่กำหนดเองส่งกลับค่าที่ไม่ใช่ตัวเลข
ตอนนี้ค่ามี "in sort" และแสดงหมายเลขบรรทัดของตัวดำเนินการ "sort" แทน
กว่าบรรทัดสุดท้ายของรูทีนเปรียบเทียบ ตอนนี้คำเตือนจะเกิดขึ้นก็ต่อเมื่อ
คำเตือนจะเปิดใช้งานในขอบเขตที่เกิด "การเรียงลำดับ" ก่อนหน้านี้คำเตือนจะ
เกิดขึ้นหากเปิดใช้งานในขอบเขตของรูทีนเปรียบเทียบ

· "sort { $a <=> $b }" ซึ่งได้รับการปรับให้เหมาะสมภายในแล้ว จะสร้าง "unnitialized"
คำเตือนสำหรับ NaN (ค่าที่ไม่ใช่ตัวเลข) เนื่องจาก "<=>" ส่งคืน "undef" สำหรับสิ่งเหล่านั้น นี้
ให้สอดคล้องกับ "sort { 1; $a <=> $b }" และกรณีที่ซับซ้อนกว่าอื่นๆ ซึ่งก็คือ
ไม่ปรับให้เหมาะสม [perl #94390]

การขอ "ย่อย" ผู้ประกอบการ
· ตัวแปรที่ผูกมัด (และอย่างอื่นที่มีมนต์ขลัง) จะไม่ได้รับการยกเว้นจาก "ความพยายามที่จะใช้" อีกต่อไป
อ้างอิงเป็น lvalue ใน substr" คำเตือน

· คำเตือนนั้นจะเกิดขึ้นเมื่อมีการกำหนด lvalue ที่ส่งคืน ไม่ใช่เมื่อ "substr"
เองเรียกว่า. สิ่งนี้สร้างความแตกต่างได้ก็ต่อเมื่อค่าที่ส่งคืนของ "substr" เป็น
อ้างอิงและต่อมามอบหมายให้

· ส่งผ่านสตริงย่อยของค่าแบบอ่านอย่างเดียวหรือ typeglob ไปยังฟังก์ชัน (ศักยภาพ lvalue
บริบท) ไม่ทำให้เกิด "ไม่สามารถบังคับ" หรือ "การแก้ไขแบบอ่านอย่างเดียว" ในทันทีอีกต่อไป
ค่า" ข้อผิดพลาด ข้อผิดพลาดนั้นเกิดขึ้นก็ต่อเมื่อค่าที่ส่งผ่านถูกกำหนดให้

สิ่งเดียวกันนี้เกิดขึ้นกับข้อผิดพลาด "substr นอกสตริง" ถ้าค่า lvalue คือ
อ่านอย่างเดียว ไม่ได้เขียนถึง ตอนนี้เป็นเพียงคำเตือน เช่นเดียวกับ rvalue "substr"

· การมอบหมาย "substr" จะไม่เรียก FETCH สองครั้งอีกต่อไปหากอาร์กิวเมนต์แรกผูก
ตัวแปรเพียงครั้งเดียว

ฝ่าย Support ที่หลากหลาย สำหรับ ที่ฝัง โมฆะ
บางส่วนของ Perl ทำงานไม่ถูกต้องโดยมีค่า null ("chr 0") ที่ฝังอยู่ในสตริง ที่
หมายความว่า ตัวอย่างเช่น "$m = "a\0b"; foo->$m" จะเรียกเมธอด "a" แทน
ชื่อวิธีจริงที่มีอยู่ใน $m ส่วนต่าง ๆ ของ Perl เหล่านี้ได้รับการแก้ไขเพื่อรองรับค่าว่าง:

· ชื่อเมธอด

· ชื่อ Typeglob (รวมถึง filehandle และชื่อรูทีนย่อย)

· ชื่อแพ็คเกจ รวมทั้งค่าส่งคืนของ "ref()"

· องค์ประกอบ Typeglob (*foo{"THING\0stuff"})

·ชื่อสัญญาณ

· คำเตือนและข้อความแสดงข้อผิดพลาดต่างๆ ที่กล่าวถึงชื่อตัวแปรหรือค่า วิธีการ
เป็นต้น

ผลข้างเคียงอย่างหนึ่งของการเปลี่ยนแปลงเหล่านี้คือการให้พรใน "\0" ไม่ทำให้ "ref()" เป็น . อีกต่อไป
คืนค่าเท็จ

Threading เป็นโรคจิต
· Typeglobs ที่ส่งคืนจากเธรดจะไม่ถูกโคลนอีกต่อไปหากเธรดพาเรนต์มีอยู่แล้ว
ลูกโลกที่มีชื่อเดียวกัน ซึ่งหมายความว่าตอนนี้รูทีนย่อยที่ส่งคืนจะกำหนดให้กับ
ตัวแปรแพ็คเกจที่ถูกต้อง [perl #107366]

· แก้ไขบางกรณีของเธรดที่หยุดทำงานเนื่องจากการจัดสรรหน่วยความจำระหว่างการโคลน
[เพิร์ล #90006].

· การเข้าร่วมเธรดในบางครั้งจะส่งคำเตือน "พยายามเพิ่มสเกลาร์ที่ไม่อ้างอิง" หาก
"ผู้โทร" ถูกใช้จากแพ็คเกจ "DB" ก่อนการสร้างเธรด [perl #98092]

· การล็อกรูทีนย่อย (ผ่าน "lock &sub") จะไม่ใช่ข้อผิดพลาดในการคอมไพล์เวลาสำหรับ Regular . อีกต่อไป
หมวดย่อย สำหรับรูทีนย่อย lvalue จะไม่พยายามส่งคืนย่อยเป็นสเกลาร์อีกต่อไป
ทำให้เกิดผลข้างเคียงแปลก ๆ เช่น "ref \$_" ส่งกลับ "CODE" ในบางกรณี

ตอนนี้ "lock &sub" เป็นข้อผิดพลาดรันไทม์หากโหลดเธรด :: ที่แชร์ (ไม่ทำอย่างอื่น)
แต่อาจได้รับการแก้ไขในรุ่นต่อๆ ไป

ผูก ตัวแปร
· กรณีต่างๆ ที่ FETCH ถูกละเลยหรือถูกเรียกหลายครั้งเกินไป
แก้ไขแล้ว:

· "PerlIO::get_layers" [perl #97956]

· "$tied =~ y/a/b/", "chop $tied" และ "chomp $tied" เมื่อ $tied มีการอ้างอิง

· เมื่อโทรไปที่ "local $_" [perl #105912]

·สี่อาร์กิวเมนต์ "เลือก"

· บัฟเฟอร์ที่ผูกไว้ส่งผ่านไปยัง "sysread"

· "$ ผูก .= <>"

· อาร์กิวเมนต์สามตัว "open" อันที่สามเป็นตัวจัดการไฟล์ที่เชื่อมโยง (เช่นใน "open $fh, ">&",
$ผูก")

· "sort" โดยอ้างอิงถึง glob ที่ผูกไว้สำหรับรูทีนการเปรียบเทียบ

· ".." และ "..." ในบริบทรายการ [perl #53554]

· "${$tied}", "@{$tied}", "%{$tied}" และ "*{$tied}" โดยที่ตัวแปรที่ผูกไว้จะส่งคืน
สตริง ("&{}" ไม่ได้รับผลกระทบ)

· "กำหนด ${ $tied_variable }"

· ฟังก์ชันต่างๆ ที่ใช้อาร์กิวเมนต์ filehandle ในบริบท rvalue ("ปิด",
"readline" เป็นต้น) [perl #97482]

· บางกรณีของ dereference นิพจน์ที่ซับซ้อน เช่น "${ (), $tied } = 1",
เคยเรียก "FETCH" หลายครั้ง แต่ตอนนี้เรียกครั้งเดียว

· "$tied->method" โดยที่ $tied ส่งกลับชื่อแพ็คเกจ - แม้จะทำให้ล้มเหลว
เรียกวิธีการเนื่องจากความเสียหายของหน่วยความจำ

· การมอบหมาย เช่น "*$tied = \&{"..."}" และ "*glob = $tied"

· "chdir", "chmod", "chown", "utime", "truncate", "stat", "lstat" และการทดสอบไฟล์
ops ("-r", "-x" เป็นต้น)

· "ผู้โทร" ตั้งค่า @DB::args เป็นอาร์กิวเมนต์ของรูทีนย่อยเมื่อเรียกจากแพ็กเกจ DB
มันเคยผิดพลาดเมื่อทำเช่นนั้นหาก @DB::args ถูกผูกไว้ ตอนนี้มันบ่น
แทน.

· การผูกองค์ประกอบของ %ENV หรือ "%^H" แล้วลบองค์ประกอบนั้นจะส่งผลให้ a
เรียกใช้เมธอด DELETE ของวัตถุที่ผูก แม้ว่าการผูกองค์ประกอบนั้นเองจะเป็น
ควรจะเทียบเท่ากับการผูกสเกลาร์ (แน่นอนว่าองค์ประกอบคือสเกลาร์)
[เพิร์ล #67490].

· เมื่อ Perl กำหนดองค์ประกอบอัตโนมัติของอาร์เรย์ที่ผูกไว้หรือแฮช (ซึ่งเกี่ยวข้องกับการเรียก STORE
ด้วยการอ้างอิงใหม่) ตอนนี้เรียก FETCH ทันทีหลังจาก STORE แทนที่จะเป็น
สมมติว่า FETCH จะส่งคืนการอ้างอิงเดียวกัน วิธีนี้จะทำให้ง่ายขึ้น
เพื่อใช้วัตถุที่ถูกผูกไว้ [perl #35865, #43011]

· สี่อาร์กิวเมนต์ "select" ไม่สร้างคำเตือน "Non-string pass as bitmask" อีกต่อไป
บนตัวแปรผูกหรือเสียที่เป็นสตริง

· การโลคัลไลซ์สเกลาร์ที่ผูกไว้ซึ่งส่งคืน typeglob จะไม่หยุดยั้งการผูกอีกต่อไป
จนกว่าจะสิ้นสุดขอบเขต

· พยายาม "goto" จากวิธีจัดการที่ผูกไว้ซึ่งใช้เพื่อทำให้หน่วยความจำเสียหายหรือ
เกิดปัญหา ตอนนี้มันสร้างข้อความแสดงข้อผิดพลาดแทน [perl #8611]

· แก้ไขข้อผิดพลาดที่เกิดขึ้นเมื่อใช้ตัวแปรที่ผูกไว้เป็นรูทีนย่อย
การอ้างอิง: ถ้าสิ่งสุดท้ายที่กำหนดหรือส่งคืนจากตัวแปรคือ a
อ้างอิงหรือ typeglob "\&$tied" อาจผิดพลาดหรือส่งคืนผิด
รูทีนย่อย กรณีอ้างอิงเป็นการถดถอยที่นำมาใช้ใน Perl 5.10.0 สำหรับ
typeglobs มันอาจจะไม่เคยทำงานจนถึงตอนนี้

เวอร์ชั่น วัตถุ และ สตริง
· ตัวดำเนินการเสริมระดับบิต (และอาจเป็นตัวดำเนินการอื่นๆ ด้วย) เมื่อส่งผ่าน a
vstring จะปล่อยให้เวทย์มนตร์ vstring ติดอยู่กับค่าส่งคืนแม้ว่า string
มีการเปลี่ยนแปลง นี่หมายความว่า "version->new(~v1.2.3)" จะสร้างเวอร์ชันที่กำลังมองหา
เช่น "v1.2.3" แม้ว่าสตริงที่ส่งผ่านไปยัง "version->new" จะเป็นจริง
"\376\375\374" สิ่งนี้ยังทำให้ B::Deparse แยกจากกัน "~v1.2.3" อย่างไม่ถูกต้องโดยไม่มี
"~" [perl #29070]

· กำหนด vstring ให้กับตัวแปรเวทย์มนตร์ (เช่น ผูก, $!) แล้วกำหนดบางอย่าง
อย่างอื่นเคยพัดเวทย์มนตร์ทั้งหมด นี่หมายความว่าตัวแปรที่ผูกไว้จะถูกยกเลิก
$! จะหยุดรับการอัปเดตเมื่อเรียกระบบที่ล้มเหลว $| จะหยุดการตั้งค่าการล้างอัตโนมัติ
และความชั่วร้ายอื่น ๆ จะเกิดขึ้น สิ่งนี้ได้รับการแก้ไขแล้ว

· "version->new("version")" และ "printf "%vd", "version"" ไม่ขัดข้องอีกต่อไป [perl
#102586].

· การเปรียบเทียบเวอร์ชัน เช่น ที่เกิดขึ้นโดยนัยกับ "use v5.43" ไม่มีอีกต่อไป
ทำให้การตั้งค่าสถานที่เปลี่ยน [perl #105784]

· ออบเจ็กต์เวอร์ชันจะไม่ทำให้เกิดการรั่วไหลของหน่วยความจำในบริบทบูลีนอีกต่อไป [perl #109762]

คำเตือน นิยามใหม่
· รูทีนย่อยจากเนมสเปซ "autouse" ได้รับการยกเว้นจากการนิยามใหม่อีกครั้ง
คำเตือน สิ่งนี้เคยทำงานใน 5.005 แต่ใช้งานไม่ได้ใน 5.6 สำหรับรูทีนย่อยส่วนใหญ่
สำหรับส่วนย่อยที่สร้างผ่าน XS ซึ่งกำหนดรูทีนย่อยใหม่จากแพ็คเกจ "อัตโนมัติ" นี่
หยุดทำงานใน 5.10

· XSUB ใหม่ตอนนี้สร้างคำเตือนการกำหนดนิยามใหม่หากพวกเขาเขียนทับการย่อยที่มีอยู่ในขณะที่พวกเขา
ทำใน 5.8.x (ตรรกะ "ใช้อัตโนมัติ" กลับกันใน 5.10-14 เฉพาะรูทีนย่อยจาก
เนมสเปซ "autouse" จะเตือนเมื่อถูกปิด)

· "newCONSTSUB" ใช้เพื่อใช้คำใบ้เตือนเวลาคอมไพล์ แทนคำใบ้รันไทม์ ดิ
รหัสต่อไปนี้ไม่ควรสร้างคำเตือนการกำหนดนิยามใหม่ แต่เคยใช้ if
"newCONSTSUB" กำหนดรูทีนย่อยที่มีอยู่ใหม่:

ใช้คำเตือน
เริ่มต้น {
ไม่มีคำเตือน;
some_XS_function_that_calls_new_CONSTSUB();
}

· คำเตือนการกำหนดนิยามใหม่สำหรับรูทีนย่อยคงที่เปิดอยู่ตามค่าเริ่มต้น (เรียกว่า
คำเตือนที่รุนแรงใน perldiag) สิ่งนี้เกิดขึ้นเฉพาะเมื่อเป็นการมอบหมาย glob หรือ
การประกาศรูทีนย่อย Perl ที่ทำให้เกิดการเตือน หากการสร้าง XSUBs
ทริกเกอร์คำเตือน มันไม่ใช่คำเตือนเริ่มต้น สิ่งนี้ได้รับการแก้ไขแล้ว

· การตรวจสอบภายในเพื่อดูว่าควรใช้คำเตือนการกำหนดนิยามใหม่เพื่อปล่อย
คำเตือน "ไม่ได้กำหนดค่าเริ่มต้น" ในกรณีเช่นนี้

ใช้คำเตือน "ไม่ได้กำหนดค่าเริ่มต้น";
ใช้ค่าคงที่ {u => undef, v => undef};
ย่อย foo(){u}
ย่อย foo(){v}

คำเตือน "ไม่ได้กำหนดค่าเริ่มต้น"
· ฟังก์ชันต่างๆ ที่ใช้อาร์กิวเมนต์ filehandle ในบริบท rvalue ("ปิด",
"readline" เป็นต้น) ใช้เพื่อเตือนสองครั้งสำหรับหมายเลขอ้างอิงที่ไม่ได้กำหนด [perl #97482]

· ตอนนี้ "dbmopen" จะเตือนเพียงครั้งเดียว แทนที่จะเป็นสามครั้ง หากอาร์กิวเมนต์ของโหมดคือ
"undef" [perl #90064]

· ตัวดำเนินการ "+=" มักจะไม่เตือนเมื่อด้านซ้ายมือเป็น "undef" แต่เป็น
ทำเช่นนั้นสำหรับตัวแปรผูก สิ่งนี้ได้รับการแก้ไขแล้ว [perl #44895]

· การแก้ไขข้อผิดพลาดใน Perl 5.14 ทำให้เกิดข้อผิดพลาดใหม่ ทำให้เกิดคำเตือน "ไม่ได้กำหนดค่าเริ่มต้น" ถึง
รายงานตัวแปรที่ไม่ถูกต้องหากตัวดำเนินการที่เป็นปัญหามีสองตัวถูกดำเนินการและตัวหนึ่งคือ
"%{...}" หรือ "@{...}". สิ่งนี้ได้รับการแก้ไขแล้ว [perl #103766]

· ".." และ "..." ในบริบทของรายการ ให้พูดถึงชื่อของตัวแปรใน "unnitialized"
คำเตือนสำหรับช่วงสตริง (ตรงข้ามกับตัวเลข)

อ่อนแอ การอ้างอิง
· การทำให้อาร์กิวเมนต์แรกอ่อนลงสำหรับเมธอด "DESTROY" ที่เรียกใช้โดยอัตโนมัติอาจส่งผลให้
ในข้อผิดพลาด "DESTROY สร้างการอ้างอิงใหม่" ผิดพลาดหรือขัดข้อง ตอนนี้มันเป็นข้อผิดพลาดที่จะ
ทำให้การอ้างอิงแบบอ่านอย่างเดียวอ่อนลง

· การอ้างอิงที่อ่อนแอถึงแฮชคำศัพท์ที่อยู่นอกขอบเขตจะไม่ค้าง (กลายเป็น
ไม่ได้กำหนด) แต่ยังคงชี้ไปที่แฮช

· การอ้างอิงที่อ่อนแอถึงตัวแปรคำศัพท์ที่อยู่นอกขอบเขตจะถูกทำลายก่อนใดๆ
วิธีการเวทย์มนตร์ (เช่น DESTROY บนวัตถุที่ผูก) ถูกเรียก สิ่งนี้จะป้องกันเช่น
จากการปรับเปลี่ยนตัวแปรที่จะได้เห็นในครั้งต่อไปที่ขอบเขตคือ
ป้อน

· การสร้างการอ้างอิงที่อ่อนแอไปยังอาร์เรย์ @ISA หรือการเข้าถึงดัชนีอาร์เรย์ ($#ISA) สามารถทำได้
ส่งผลให้การทำบัญชีภายในสับสนสำหรับองค์ประกอบที่เพิ่มลงในอาร์เรย์ @ISA ในภายหลัง
ตัวอย่างเช่น การสร้างการอ้างอิงที่อ่อนแอไปยังองค์ประกอบนั้นสามารถผลักดันจุดอ่อนนั้นได้
อ้างอิงถึง @ISA; และองค์ประกอบที่เพิ่มหลังจากใช้ $#ISA จะถูกละเว้นโดยวิธีการ
ค้นหา [perl #85670]

อื่นๆ โดดเด่น แก้ไข
· "quotemeta" จะแสดงคำพูดอย่างต่อเนื่องกับอักขระที่ไม่ใช่ ASCII ที่เหมือนกันภายใต้ "use feature
'unicode_strings'" ไม่ว่าสตริงนั้นจะถูกเข้ารหัสใน UTF-8 หรือไม่ก็ตาม
แก้ไขร่องรอยสุดท้าย (เราหวัง) ของ "Unicode Bug" ที่โด่งดังใน
เพอร์ลูนิโคด [เพิร์ล #77654]

จุดรหัสใดต่อไปนี้ที่ยกมาซึ่งมีการเปลี่ยนแปลงตามคำแนะนำของ Unicode
ดู "quotemeta" ใน perlfunc สำหรับรายละเอียด

· "การศึกษา" ตอนนี้เป็น no-op น่าจะเป็นการแก้ไขข้อผิดพลาดทั้งหมดที่เกี่ยวข้องกับการศึกษา
ทำให้การจับคู่ regex ทำงานไม่ถูกต้อง!

· เมื่อมีคนเขียนว่า "open foo || die" ซึ่งเคยทำงานใน Perl 4 จะเป็น "Precedence
มีการสร้างคำเตือนปัญหา" คำเตือนนี้ใช้ผิดพลาดเพื่อนำไปใช้กับ
ชื่อตัวจัดการคำที่ผ่านการรับรองซึ่งไม่ตามด้วย "||" สิ่งนี้ได้รับการแก้ไขแล้ว

· หลังจากแพ็คเกจนามแฝง ("*foo:: = *bar::") ให้ "select" ด้วย 0 หรือ 1 อาร์กิวเมนต์
บางครั้งส่งคืนชื่อที่ไม่สามารถใช้เพื่ออ้างถึง filehandle หรือ
บางครั้งมันจะส่งคืน "undef" แม้ว่าจะเลือก filehandle ตอนนี้มันกลับมาแล้ว
การอ้างอิง typeglob ในกรณีดังกล่าว

· "PerlIO::get_layers" จะไม่ละเว้นอาร์กิวเมนต์ที่คิดว่าเป็นตัวเลขอีกต่อไป
ในขณะที่ปฏิบัติต่อผู้อื่นเป็นชื่อไฟล์จัดการ ตอนนี้มีความสม่ำเสมอสำหรับสเกลาร์แบน
(กล่าวคือ ไม่ใช่การอ้างอิง)

·สวิตช์ที่ไม่รู้จักใน "#!" ไลน์

หากสวิตช์เช่น -xที่ไม่สามารถเกิดขึ้นได้ใน "#!" ใช้บรรทัดที่นั่น perl ตาย
กับ "เลียนแบบไม่ได้..."

มันเคยสร้างข้อความเดียวกันสำหรับสวิตช์ที่ Perl ไม่รู้จักเลย
ไม่ว่าจะอยู่ในบรรทัดคำสั่งหรือ "#!" ไลน์.

ตอนนี้มันสร้างข้อความแสดงข้อผิดพลาด "สวิตช์ที่ไม่รู้จัก" [perl #104288]

· ขณะนี้ "ระบบ" บล็อกตัวจัดการสัญญาณ SIGCHLD ชั่วคราว เพื่อป้องกันสัญญาณ
ตัวจัดการจากการขโมยสถานะทางออก [perl #105700]

· รหัสการจัดรูปแบบ %n สำหรับ "printf" และ "sprintf" ซึ่งทำให้เกิดจำนวน
อักขระที่จะกำหนดให้กับอาร์กิวเมนต์ถัดไป ตอนนี้กำหนดจำนวน
อักขระแทนจำนวนไบต์

ตอนนี้ยังใช้งานได้กับฟังก์ชัน lvalue พิเศษ เช่น "substr" และ noexistent
องค์ประกอบแฮชและอาร์เรย์ [perl #3471, #103492]

· Perl ข้ามค่าการคัดลอกที่ส่งคืนจากรูทีนย่อย เพื่อประโยชน์ของความเร็ว หากทำ
จึงไม่ทำให้เกิดความแตกต่างที่สังเกตได้ เนื่องจากตรรกะผิดพลาด สิ่งนี้จะเกิดขึ้น
ด้วยผลลัพธ์ของ "ลบ", "shift" หรือ "splice" แม้ว่าจะมีการอ้างอิงผลลัพธ์ก็ตาม
ที่อื่น มันยังทำเช่นนั้นกับตัวแปรที่ผูกไว้ซึ่งกำลังจะเป็นอิสระ [perl #91844
#95548].

· "utf8::decode" ปฏิเสธที่จะแก้ไขสเกลาร์แบบอ่านอย่างเดียว [perl #91850]

· ปล่อย $_ ในบล็อก "grep" หรือ "map" ซึ่งเป็นบล็อกโค้ดที่ฝังอยู่ในชุดปกติ
นิพจน์ หรือตัวกรอง @INC (รูทีนย่อยที่ส่งคืนโดยรูทีนย่อยใน @INC) ที่ใช้เพื่อ
ส่งผลให้เกิดการค้างสองครั้งหรือเกิดปัญหา [perl #91880, #92254, #92256]

· "eval" ส่งคืน "undef" ในบริบทสเกลาร์หรือรายการว่างในบริบทของรายการเมื่อมี
เป็นข้อผิดพลาดรันไทม์ เมื่อ "eval" ถูกส่งผ่านสตริงในบริบทรายการและไวยากรณ์
เกิดข้อผิดพลาด ใช้เพื่อส่งคืนรายการที่มีองค์ประกอบที่ไม่ได้กำหนดเพียงรายการเดียว ตอนนี้
จะส่งคืนรายการที่ว่างเปล่าในบริบทรายการสำหรับข้อผิดพลาดทั้งหมด [perl #80630]

· "goto &func" ไม่ขัดข้องอีกต่อไป แต่สร้างข้อความแสดงข้อผิดพลาดเมื่อคลี่คลายของ
ขอบเขตของรูทีนย่อยปัจจุบันยิงตัวทำลายซึ่งกำหนดรูทีนย่อยเป็น
"ไป" [perl #99850]

· Perl นับจำนวนการอ้างอิงเพิ่มเติมในแพ็คเกจที่มีรหัสอยู่ในขณะนี้
กำลังคอมไพล์ซึ่งหมายความว่ารหัสต่อไปนี้ไม่ขัดข้องอีกต่อไป [perl #101486]:

แพ็คเกจฟู;
BEGIN {*Foo:: = *บาร์::}
ซับฟู;

· โอเปอเรเตอร์การทำซ้ำ "x" จะไม่หยุดทำงานบนบิลด์ 64 บิตที่มีการทำซ้ำจำนวนมาก
นับ [perl #94560]

· เรียก "require" โดยปริยาย $_ เมื่อ *CORE::GLOBAL::require ถูกแทนที่
ไม่ segfault อีกต่อไป และตอนนี้ $_ ถูกส่งไปยังรูทีนย่อยการแทนที่ [perl
#78260].

· "ใช้" และ "ต้องการ" จะไม่ได้รับผลกระทบจากเลเยอร์ I/O ที่ทำงานอยู่ในตัวผู้โทรอีกต่อไป
ขอบเขต (เปิดใช้งานโดย open.pm) [perl #96008]

· "ของเรา $::e; $e" (ซึ่งไม่ถูกต้อง) จะไม่สร้าง "ข้อผิดพลาดในการรวบรวมที่
lib/utf8_heavy.pl..." ข้อความแสดงข้อผิดพลาดซึ่งเริ่มเปล่งใน 5.10.0 [perl
#99984].

· บนระบบ 64 บิต ตอนนี้ "read()" จะเข้าใจสตริงขนาดใหญ่ที่ออฟเซ็ตเกินกว่า 32-บิต
พิสัย.

· ข้อผิดพลาดที่เกิดขึ้นเมื่อประมวลผลแอตทริบิวต์ของรูทีนย่อยไม่ทำให้เกิด
ต้นไม้ op ของรูทีนย่อยที่จะรั่วไหล

· การส่งผ่านรูทีนย่อยค่าคงที่เดียวกันไปยังทั้ง "ดัชนี" และ "ฟอร์มไลน์" จะไม่ทำให้เกิดอีกต่อไป
อย่างใดอย่างหนึ่งล้มเหลว [perl #89218] (5.14.1)

· กำหนดรายการให้กับตัวแปรคำศัพท์ที่ประกาศด้วยคุณลักษณะในคำสั่งเดียวกัน
("my ($x,@y) : blimp = (72,94)") หยุดทำงานใน Perl 5.8.0 ตอนนี้เป็นแล้ว
คงที่

· Perl 5.10.0 แนะนำตรรกะผิดพลาดที่ทำให้ "U*" อยู่ตรงกลางของแพ็ค
เทมเพลตที่เทียบเท่ากับ "U0" หากสตริงอินพุตว่างเปล่า สิ่งนี้ได้รับการแก้ไขแล้ว [perl
#90160]. (5.14.2)

· ตัวทำลายล้างบนวัตถุไม่ได้ถูกเรียกระหว่างการทำลายล้างโลกบนวัตถุที่เป็น
ไม่ได้อ้างอิงโดยสเกลาร์ใด ๆ สิ่งนี้อาจเกิดขึ้นได้หากองค์ประกอบอาร์เรย์ได้รับพร
(เช่น "bless \$a[0]") หรือถ้าการปิดอ้างอิงถึงตัวแปรที่มีความสุข ("bless \my @a;
ย่อย foo { @a }")

ตอนนี้มีการผ่านพิเศษระหว่างการทำลายล้างทั่วโลกเพื่อยิงผู้ทำลายล้างบนทุก ๆ
วัตถุที่อาจทิ้งไว้หลังจากผ่านปกติที่ตรวจสอบวัตถุที่อ้างอิงโดย
สเกลาร์ [perl #36347]

· แก้ไขกรณีที่มีความเป็นไปได้ที่บัฟเฟอร์อิสระอาจถูกอ่านตั้งแต่เมื่อ
แยกวิเคราะห์เอกสารที่นี่ [perl #90128] (5.14.1)

· "แต่ละ(อารีย์)" ตอนนี้ถูกห่อด้วย "defined(...)" เช่น "each(กัญชา)", ภายใน "ชั่วขณะหนึ่ง"
เงื่อนไข [perl #90888]

· ปัญหาเกี่ยวกับการเผยแพร่บริบทเมื่อบล็อก "do" เป็นอาร์กิวเมนต์เพื่อ "return" has
ได้รับการแก้ไข มันเคยทำให้ "undef" ถูกส่งกลับในบางกรณีของ "การคืน"
ภายในบล็อก "if" ซึ่งตามมาด้วย "return" อื่น

· การเรียก "ดัชนี" ด้วยค่าคงที่เสียจะไม่ทำให้เกิดค่าคงที่ในภายหลัง
คอมไพล์โค้ดให้เสีย [perl #64804]

· การวนซ้ำไม่สิ้นสุด เช่น "1 ขณะที่ 1" ใช้เพื่อหยุดโหมด "ย่อย" ที่เข้มงวดไม่ให้ทำงาน
ส่วนที่เหลือของบล็อก

· สำหรับการมอบหมายรายการเช่น "($a,$b) = ($b,$a)" Perl ต้องทำสำเนาของรายการใน
ทางขวามือก่อนมอบหมายให้ชิดซ้าย เพื่อประโยชน์ของประสิทธิภาพมัน
กำหนดค่าทางด้านขวาให้กับรายการทางด้านซ้ายหากไม่มีตัวแปร
ถูกกล่าวถึงทั้งสองด้าน เช่นเดียวกับใน "($a,$b) = ($c,$d)" ตรรกะในการกำหนดเวลา
มันสามารถโกงผิดพลาดได้ใน "&&" และ "||" ทางด้านขวามือสามารถหลอกได้
ดังนั้น "($a,$b) = $some_true_value && ($b,$a)" จะสิ้นสุดการกำหนดค่าของ $b ให้กับ
สเกลาร์ทั้งคู่

· Perl จะไม่พยายามใช้บริบท lvalue กับสตริงใน "("string", $variable) อีกต่อไป
||= 1" (ซึ่งเคยเป็นข้อผิดพลาด) เนื่องจากด้านซ้ายมือของ "||=" ถูกประเมินใน
บริบทสเกลาร์ นั่นคือตัวดำเนินการเครื่องหมายจุลภาค scalar ซึ่งให้ทั้งหมดยกเว้นรายการสุดท้ายเป็นโมฆะ
บริบท. ไม่มีสิ่งที่เรียกว่าบริบท void lvalue ดังนั้นจึงเป็นความผิดพลาดสำหรับ Perl
เพื่อพยายามบังคับมัน [perl #96942]

· "ผู้โทร" จะไม่รั่วไหลของหน่วยความจำอีกต่อไปเมื่อถูกเรียกจากแพ็คเกจ DB หาก @DB::args เคยเป็น
กำหนดให้หลังจากการโทรครั้งแรกไปที่ "ผู้โทร" ปลาคาร์พทำให้เกิดข้อผิดพลาดนี้ [perl
#97010]. (5.14.2)

· "ปิด" และฟังก์ชันจัดการไฟล์ที่คล้ายกัน เมื่อเรียกใช้ตัวแปรส่วนกลางในตัว
(เช่น $+) เคยตายหากตัวแปรเกิดขึ้นเพื่อเก็บค่าที่ไม่ได้กำหนดไว้แทน
ของการสร้างคำเตือน "การใช้ค่าที่ไม่ได้กำหนดค่าเริ่มต้น" ตามปกติ

· เมื่อมีการแนะนำตัวจัดการไฟล์ autovivified ใน Perl 5.6.0 แสดงว่า "readline" เป็น
ทำขึ้นโดยไม่ได้ตั้งใจเพื่อทำให้อัตโนมัติเมื่อเรียกว่า "readline($foo)" (แต่ไม่ใช่เป็น
"<$foo>") ตอนนี้ได้รับการแก้ไขแล้วไม่ให้ autovivify

· การเรียกรูทีนย่อยที่ไม่ระบุชื่อที่ไม่ได้กำหนดไว้ (เช่น สิ่งที่ $x เก็บไว้หลังจาก "undef &{$x =
sub{}}") ใช้เพื่อทำให้เกิดข้อผิดพลาด "ไม่ใช่การอ้างอิงโค้ด" ซึ่งได้รับการแก้ไขเป็น
"เรียกรูทีนย่อยที่ไม่ได้กำหนด" [perl #71154]

· ทำให้ @DB::args ว่างระหว่างการใช้ "ผู้โทร" จะไม่ส่งผลให้เกิดความผิดพลาดอีกต่อไป
[เพิร์ล #93320].

· "setpgrp($foo)" เคยเทียบเท่ากับ "($foo, setpgrp)" เนื่องจาก "setpgrp" เป็น
ละเว้นข้อโต้แย้งหากมีเพียงข้อเดียว ตอนนี้เท่ากับ
"setpgrp($foo,0)".

· "shmread" ไม่ได้ตั้งค่าสถานะสเกลาร์อย่างถูกต้องเมื่ออ่านจากหน่วยความจำที่ใช้ร่วมกัน
ทำให้การแสดงตัวเลขแคชที่มีอยู่ในสเกลาร์ยังคงมีอยู่ [perl
#98480].

· "++" และ "--" ใช้ได้กับสำเนาของ globs แทนที่จะตาย

· "ประกบ ()" ไม่เตือนเมื่อตัดทอน

ตอนนี้คุณสามารถจำกัดขนาดของอาร์เรย์โดยใช้ "splice(@a,MAX_LEN)" ได้โดยไม่ต้องกังวล
เกี่ยวกับคำเตือน

· $$ ไม่มีมลทินอีกต่อไป เนื่องจากค่านี้มาจาก "getpid()" โดยตรง จึงมีค่าเท่ากับ
ปลอดภัยเสมอ

· parser จะไม่รั่ว filehandle หาก STDIN ถูกปิดก่อนที่จะเริ่ม parsing
[เพิร์ล #37033].

· "ตาย" ด้วยค่าที่ไม่ใช่ค่าอ้างอิง ไม่ใช่สตริง หรือค่าเวทย์มนตร์ (เช่น เสีย) ใน $@ ตอนนี้
เผยแพร่ค่านั้นอย่างถูกต้อง [perl #111654]

ที่รู้จักกัน ปัญหา


· บน Solaris เรามีความล้มเหลวสองประเภท

If ทำ เป็นของซัน ทำเราได้รับข้อผิดพลาดเกี่ยวกับการกำหนดมาโครที่มีรูปแบบไม่ดีใน
Makefile. ที่เกิดขึ้นเมื่อ ./configure พยายามที่จะขึ้นอยู่กับ กำหนดค่า แล้วก็ออกไป
0 แต่ต่อไป ทำ-ing ล้มเหลว

If ทำ is จีเมค, กำหนดค่า เสร็จแล้วเราจะได้รับข้อผิดพลาดที่เกี่ยวข้องกับ
/usr/include/stdbool.h

· บน Win32 การทดสอบจำนวนมากหยุดทำงานเว้นแต่ STDERR จะถูกเปลี่ยนเส้นทาง สาเหตุของสิ่งนี้คือ
ยังอยู่ระหว่างการสอบสวน

· เมื่อสร้างเป็นรูทด้วย umask ที่ป้องกันไม่ให้ไฟล์อ่านได้แบบอื่น
t/op/filetest.t จะล้มเหลว นี่เป็นบั๊กทดสอบ ไม่ใช่บั๊กในลักษณะการทำงานของ Perl

· การกำหนดค่าด้วย gcc ล่าสุดและ link-time-optimization เช่น "Configure
-Doptimize='-O2 -flto'" ล้มเหลวเนื่องจากเครื่องมือเพิ่มประสิทธิภาพจะปรับการกำหนดค่าบางส่วนให้เหมาะสม
การทดสอบ วิธีแก้ปัญหาคือละเว้นแฟล็ก "-flto" เมื่อรัน Configure แต่เพิ่มเข้าไป
กลับมาในขณะที่สร้างจริง ๆ บางอย่างเช่น

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 หมายถึงการพัฒนาประมาณ 12 เดือนตั้งแต่ Perl 5.14.0 และ
มีการเปลี่ยนแปลงประมาณ 590,000 บรรทัดใน 2,500 ไฟล์จากผู้เขียน 139 คน

Perl เติบโตอย่างต่อเนื่องในทศวรรษที่สามด้วยชุมชนผู้ใช้ที่มีชีวิตชีวา
และนักพัฒนา เป็นที่ทราบกันดีว่าบุคคลต่อไปนี้มีส่วนในการปรับปรุงที่
กลายเป็น Perl 5.16.0:

อารอน เครน, อภิจิตต์ เมนอน-เซน, อบิเกล, อลัน ฮักไก อลาวี, อัลแบร์โต ซิโม~เอส, อเล็กซานเดอร์
ซิออร์นี่, อันเดรียส โคนิก, แอนดี้ โดเฮอร์ตี้, อริสโตเติล พากัลต์ซิส, โบ โยฮันส์สัน, โบ ลินด์เบิร์ก,
เบรโน จี. เดอ โอลิเวรา, ไบรอัน ดี ฟอย, ไบรอัน เฟรเซอร์, ไบรอัน กรีนฟิลด์, คาร์ล เฮย์เตอร์, แชส
โอเวนส์, เจียเหลียง เกา, ชิป ซัลเซนเบิร์ก, คริส 'BinGOs' วิลเลียมส์, คริสเตียน แฮนเซ่น,
คริสโตเฟอร์ เจ. แมดเซ่น, โครมาติก, แคลส์ เจคอบส์สัน, เคลาดิโอ รามิเรซ, เครก เอ. เบอร์รี่, เดเมียน
คอนเวย์, แดเนียล คาห์น กิลล์มอร์, ดาริน แม็คไบรด์, เดฟ รอลสกี้, เดวิด แคนเทรล, เดวิด โกลเด้น,
เดวิด ลีดบีเตอร์, เดวิด มิทเชล, ดี นิวคัม, เดนนิส คาร์เซเมเกอร์, โดมินิค ฮาร์กรีฟส์,
ดักลาส คริสโตเฟอร์ วิลสัน, เอริก ไบรน์, คุณพ่อคริสซอสโตมอส, ฟลอเรียน แร็กวิทซ์, เฟรเดอริก
Briere, George Greer, Gerard Goossen, Gisle Aas, แบรนด์ H.Merijn, Hojung Youn, Ian
กู๊ดเอเคอร์, เจมส์ อี คีแนน, แจน ดูบัวส์, เจอร์รี่ ดี. เฮดเดน, เจสซี่ ลูเออร์ส, เจสซี่ วินเซนต์, จิลส์
โจเอลเกอร์, จิม โครมี, จิม เมเยอริง, โจเอล เบอร์เกอร์, โยฮัน วโรม็องส์, โยฮันเนส พลูเนียน, จอห์น
ฮอว์กินสัน, จอห์น พี. ลินเดอร์แมน, จอห์น พีค็อก, โจชัว เบน จอร์, เยอร์ด วาลเบอร์, คาร์ล
วิลเลียมสัน, คาร์ทิก ราชาโกปาลัน, คีธ ทอมป์สัน, เควิน เจ. วูลลีย์, เควิน ไรด์, โลร็องต์
ดามี, ลีโอ แลปเวิร์ธ, ลีออน โบรการ์ด, ลีออน ทิมเมอร์มันส์, หลุยส์ สตรุส, ลูคัส ไม, มาร์ค กรีน,
มาร์เซล กรูเนาเออร์, มาร์ค เอ. สแตรทมัน, มาร์ค ดูตสัน, มาร์ค เจสัน โดมินุส, มาร์ติน แฮสช์,
Matthew Horsfall, Max Maischein, Michael G Schwern, Michael Witten, Mike Sheldrake, มอริตซ์
เลนซ์, นิโคลัส คลาร์ก, นิโก้ ไทนี่, นูโน่ คาร์วัลโญ, โป อัมมา, พอล อีแวนส์, พอล กรีน, พอล
จอห์นสัน, เพอร์เลิฟเวอร์, ปีเตอร์ จอห์น อัคแลม, ปีเตอร์ มาร์ตินี่, ปีเตอร์ สก็อตต์, ฟิล มอนเซ่น, ปิโน
ทอสคาโน่, ราฟาเอล การ์เซีย-ซัวเรซ, เรนเนอร์ แทมเมอร์, เรนี่ เออร์บัน, ริคาร์โด้ ซิกเนส, โรบิน บาร์เกอร์,
Rodolfo Carvalho, Salvador Fandin~o, Sam Kimbrel, Samuel Thibault, Shawn M Moore, ชิเกย่า
ซูซูกิ, ชิรากาตะ เคนทาโร่, ชโลมิ ฟิช, ซิซิฟัส, สลาเวน เรซิก, สปิรอส เดแนกซัส, สเตฟเฟน
Mueller, Steffen Schwigon, Stephen Bennett, Stephen Oberholtzer, Stevan Little, สตีฟ เฮย์,
สตีฟ ปีเตอร์ส, โธมัส ซิบลีย์, ธอร์สเทน กลาเซอร์, ทิโมธี ลิตต์, ท็อดด์ รินัลโด, ทอม
คริสเตียนเซ่น, ทอม ฮูกินส์, โทนี่ คุก, วาดิม โคโนวาลอฟ, วินเซนต์ พิต, วลาดิมีร์ ทิโมฟีฟ, วอลท์
มานคอฟสกี้, อีฟ ออร์ตัน, เซฟรัม, ซบาน อัมบรุส, เอวาร์ อาร์นฟเยอ บียาร์มาสัน

รายการด้านบนนี้เกือบจะไม่สมบูรณ์อย่างแน่นอนเนื่องจากสร้างขึ้นโดยอัตโนมัติจาก
ประวัติการควบคุมเวอร์ชัน โดยเฉพาะอย่างยิ่งจะไม่รวมชื่อของ (อย่างมาก
ชื่นชม) ผู้ร่วมให้ข้อมูลที่รายงานปัญหาไปยังตัวติดตามจุดบกพร่องของ Perl

การเปลี่ยนแปลงหลายอย่างที่รวมอยู่ในเวอร์ชันนี้มีต้นกำเนิดในโมดูล CPAN ที่รวมอยู่ใน
แกนกลางของ Perl เรารู้สึกขอบคุณต่อชุมชน CPAN ทั้งหมดที่ช่วยให้ Perl เติบโต

สำหรับรายชื่อผู้มีส่วนร่วมทางประวัติศาสตร์ของ Perl ทั้งหมด โปรดดูที่ ผู้เขียน
ไฟล์ในการกระจายแหล่งที่มาของ Perl

การรายงาน Bugs


หากคุณพบว่าสิ่งที่คุณคิดว่าเป็นข้อบกพร่อง คุณอาจตรวจสอบบทความที่โพสต์ล่าสุดใน
กลุ่มข่าว comp.lang.perl.misc และฐานข้อมูลจุดบกพร่องของ Perl ที่http://rt.perl.org/perlbug/>.
อาจมีข้อมูลได้ที่http://www.perl.org/>, หน้าแรกของ Perl

หากคุณเชื่อว่าคุณมีข้อบกพร่องที่ไม่ได้รายงาน โปรดเรียกใช้โปรแกรม perlbug ที่มาพร้อมกับ
การปล่อยตัวของคุณ อย่าลืมตัดแต่งบั๊กของคุณให้เป็นกรณีทดสอบเล็กๆ แต่เพียงพอ ข้อบกพร่องของคุณ
รายงานพร้อมกับผลลัพธ์ของ "perl -V" จะถูกส่งไปที่ [ป้องกันอีเมล] ที่จะ
วิเคราะห์โดยทีม Perl porting

หากจุดบกพร่องที่คุณกำลังรายงานมีนัยด้านความปลอดภัย ซึ่งทำให้ไม่เหมาะสมต่อ
ส่งไปยังรายชื่อผู้รับจดหมายที่เก็บถาวรแล้วกรุณาส่งไปที่
[ป้องกันอีเมล]. สิ่งนี้ชี้ไปที่การสมัครรับข้อมูลแบบปิด
ซึ่งรวมถึงผู้ผูกมัดหลักทั้งหมด ซึ่งจะสามารถช่วยประเมินผลกระทบของ
ปัญหา หาแนวทางแก้ไข และช่วยประสานงานการออกแพตช์เพื่อบรรเทา
หรือแก้ไขปัญหาในทุกแพลตฟอร์มที่รองรับ Perl โปรดใช้สิ่งนี้
กล่าวถึงปัญหาด้านความปลอดภัยใน Perl core เท่านั้น ไม่ใช่สำหรับโมดูลที่แยกจากกัน
เผยแพร่บน CPAN

ใช้ perl5160delta ออนไลน์โดยใช้บริการ onworks.net


เซิร์ฟเวอร์และเวิร์กสเตชันฟรี

ดาวน์โหลดแอพ Windows & Linux

คำสั่ง Linux

Ad




×
โฆษณา
❤️ช้อป จอง หรือซื้อที่นี่โดยไม่เสียค่าใช้จ่าย ช่วยให้บริการต่างๆ ฟรี