Tiếng AnhTiếng PhápTiếng Tây Ban Nha

Biểu tượng yêu thích OnWorks

perl5160delta - Trực tuyến trên đám mây

Chạy perl5160delta trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks trên Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

Đây là lệnh perl5160delta có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

CHƯƠNG TRÌNH:

TÊN


perl5160delta - có gì mới cho perl v5.16.0

MÔ TẢ


Tài liệu này mô tả sự khác biệt giữa bản phát hành 5.14.0 và bản phát hành 5.16.0.

Nếu bạn đang nâng cấp từ bản phát hành cũ hơn, chẳng hạn như 5.12.0, trước tiên hãy đọc perl5140delta,
trong đó mô tả sự khác biệt giữa 5.12.0 và 5.14.0.

Một số bản sửa lỗi trong bản phát hành này đã được chuyển sang bản phát hành 5.14.x sau này. Những thứ kia
được biểu thị bằng phiên bản 5.14.x trong ngoặc đơn.

Chú ý


Với việc phát hành Perl 5.16.0, loạt bản phát hành 5.12.x hiện không còn được hỗ trợ
Giai đoạn. Có thể có các bản phát hành 5.12.x trong tương lai, nhưng chỉ trong trường hợp có vấn đề bảo mật quan trọng
vấn đề. Người dùng Perl 5.12 hoặc cũ hơn nên xem xét nâng cấp lên bản phát hành mới hơn
của Perl.

Chính sách này được mô tả chi tiết hơn trong perlpolicy.

Trung tâm Cải tiến


"sử dụng PHIÊN BẢN"
Kể từ bản phát hành này, các khai báo phiên bản như "use v5.16" hiện đã tắt tất cả các tính năng trước đây
kích hoạt gói tính năng mới. Điều này có nghĩa là những điều sau đây đúng:

sử dụng 5.016;
# chỉ có 5.16 tính năng được kích hoạt ở đây
sử dụng 5.014;
# chỉ kích hoạt tính năng 5.14 ở đây (không phải 5.16)

"use v5.12" và cao hơn tiếp tục kích hoạt "use strict" và "no" nghiêm ngặt nhưng rõ ràng
strict" hiện ghi đè khai báo phiên bản, ngay cả khi chúng đến trước:

không nghiêm ngặt;
sử dụng 5.012;
# ở đây không nghiêm ngặt

Có gói tính năng ":default" mới đại diện cho tập hợp các tính năng được bật
trước khi bất kỳ tuyên bố phiên bản hoặc "tính năng sử dụng" nào được nhìn thấy. Khai báo phiên bản bên dưới
5.10 hiện kích hoạt bộ tính năng ":default". Điều này thực sự không làm thay đổi hành vi của
"sử dụng v5.8", vì các tính năng được thêm vào bộ ":default" là những tính năng truyền thống
được bật theo mặc định trước khi có thể tắt chúng.

"không có tính năng" hiện được đặt lại về bộ tính năng mặc định. Để tắt tất cả các tính năng (đó là
có thể là một yêu cầu có mục đích khá đặc biệt, vì có lẽ nó sẽ không khớp với bất kỳ yêu cầu nào được đặt tên
tập hợp ngữ nghĩa), bây giờ bạn có thể viết "không có tính năng ': tất cả'".

$[ hiện đã bị tắt trong "use v5.16". Nó là một phần của bộ tính năng mặc định và có thể
được bật hoặc tắt một cách rõ ràng bằng "sử dụng tính năng 'array_base'".

"__SUB__"
Mã thông báo "__SUB__" mới, có sẵn trong tính năng "current_sub" (xem tính năng) hoặc "sử dụng
v5.16", trả về một tham chiếu đến chương trình con hiện tại, giúp viết đệ quy dễ dàng hơn
đóng cửa.

Mới Cải thiện Tích hợp
Xem thêm thích hợp "eval"

Toán tử "eval" đôi khi coi đối số chuỗi là một chuỗi các ký tự và
đôi khi dưới dạng một chuỗi byte, tùy thuộc vào mã hóa bên trong. Nội bộ
mã hóa không được cho là tạo ra bất kỳ sự khác biệt nào, nhưng có mã dựa trên điều này
sự không nhất quán.

Các tính năng "unicode_eval" và "evalbytes" mới (được bật trong "sử dụng 5.16.0") giải quyết vấn đề này.
Tính năng "unicode_eval" khiến "eval $string" coi chuỗi luôn là Unicode.
Tính năng "evalbytes" cung cấp một hàm, được gọi là "evalbytes", dùng để đánh giá
đối số của nó luôn là một chuỗi byte.

Các tính năng này cũng khắc phục những điểm kỳ lạ với các bộ lọc nguồn rò rỉ ra phạm vi động bên ngoài.

Xem tính năng để biết thêm chi tiết.

"chất nền" giá trị tân trang

Khi "chất nền" được gọi trong ngữ cảnh lvalue hoặc lvalue tiềm năng với hai hoặc ba đối số,
một giá trị vô hướng lvalue đặc biệt được trả về để sửa đổi chuỗi gốc (đối số đầu tiên)
khi được giao phó.

Trước đây, giá trị offset (đối số thứ hai và thứ ba) được truyền cho "substr" sẽ là
được chuyển đổi ngay lập tức để khớp với chuỗi, độ lệch âm được dịch thành dương
và các offset nằm ngoài phần cuối của chuỗi bị cắt bớt.

Bây giờ, các độ lệch được ghi lại mà không sửa đổi trong đại lượng vô hướng giá trị đặc biệt được
được trả về và chuỗi gốc thậm chí không được chính "substr" xem xét mà chỉ khi
giá trị trả về được đọc hoặc sửa đổi.

Những thay đổi này dẫn đến một thay đổi không tương thích:

Nếu chuỗi gốc thay đổi độ dài sau lệnh gọi "substr" nhưng trước khi gán cho
giá trị trả về của nó, các offset âm sẽ ghi nhớ vị trí của chúng từ cuối
chuỗi, ảnh hưởng đến mã như thế này:

$string = "chuỗi" của tôi;
$lvalue của tôi = \substr $string, -4, 2;
in $$lvalue, "\n"; # in "ri"
$string = "dây buộc";
in $$lvalue, "\n"; # in "wi"; được sử dụng để in "il"

Điều tương tự cũng xảy ra với đối số thứ ba bị bỏ qua. Giá trị trả về sẽ luôn
kéo dài đến cuối chuỗi, ngay cả khi chuỗi trở nên dài hơn.

Vì thay đổi này cũng cho phép sửa nhiều lỗi (xem "Toán tử "substr") và
do hành vi của giá trị bù trừ âm chưa bao giờ được chỉ định nên thay đổi được coi là
có thể chấp nhận được.

Trả hàng giá trị of "trói"

Giá trị được trả về bởi "tied" trên một biến bị ràng buộc bây giờ là đại lượng vô hướng thực chứa giá trị
đối tượng mà biến được gắn vào. Điều này làm cho mối quan hệ bị suy yếu với
"Scalar::Util::weaken(bị ràng buộc $tied_variable)".

Unicode HỖ TRỢ
Hỗ trợ (gần như) Unicode 6.1

Bên cạnh việc bổ sung toàn bộ kịch bản mới và các ký tự mới trong các kịch bản hiện có, điều này
phiên bản mới của Unicode, như mọi khi, thực hiện một số thay đổi đối với các ký tự hiện có. Một sự thay đổi
có thể gặp phải một số ứng dụng là Danh mục chung gồm hai ký tự trong
Phạm vi Latin-1, PILCROW SIGN và SECTION SIGN, đã được thay đổi từ Other_Symbol thành
Other_Dấu chấm câu. Sự thay đổi tương tự đã được thực hiện đối với một ký tự trong mỗi tiếng Tây Tạng,
Ethiopia và Aegean. Mã điểm U+3248..U+324F (SỐ TRÒN MƯỜI TRÊN VUÔNG ĐEN
đến SỐ TRÒN TÁM TRÊN VUÔNG ĐEN) đã thay đổi Danh mục Chung
từ Other_Symbol đến Other_Numeric. Thuộc tính ngắt dòng có những thay đổi đối với tiếng Do Thái và
Tiếng Nhật; và do những thay đổi khác trong 6.1, cấu trúc biểu thức chính quy Perl "\X"
bây giờ hoạt động khác nhau đối với một số ký tự bằng tiếng Thái và tiếng Lào.

Các bí danh mới (từ đồng nghĩa) đã được xác định cho nhiều giá trị thuộc tính; những thứ này, cùng với
những cái hiện có trước đây đều được lập chỉ mục chéo trong perluniprops.

Giá trị trả về của "charnames::viacode()" bị ảnh hưởng bởi những thay đổi khác:

Điểm mã Tên cũ Tên mới
U+000A FEED LINE (LF) FEED LINE
U+000C HÌNH THỨC FEED (FF) HÌNH THỨC FEED
U+000D TRẢ LẠI VẬN CHUYỂN (CR) TRẢ LẠI VẬN CHUYỂN
U+0085 DÒNG TIẾP THEO (NEL) DÒNG TIẾP THEO
U+008E SHIFT-SHIFT 2 SHIFT-SHIFT-2
U+008F SHIFT-SHIFT 3 SHIFT-3
U+0091 SỬ DỤNG RIÊNG 1 SỬ DỤNG RIÊNG-1
U+0092 SỬ DỤNG RIÊNG 2 SỬ DỤNG RIÊNG-2
U+2118 SCRIPT VỐN P CHỨC NĂNG ELliptic WEIERSTRAASS

Perl sẽ chấp nhận bất kỳ tên nào trong số này làm đầu vào, nhưng bây giờ "charnames::viacode()" trả về
tên mới của mỗi cặp. Sự thay đổi của U+2118 được Unicode coi là một sự điều chỉnh,
đó là tên ban đầu là một sai lầm (nhưng một lần nữa, nó sẽ vẫn có hiệu lực mãi mãi khi sử dụng nó
để tham khảo U+2118). Nhưng hầu hết những thay đổi này là hậu quả của lỗi Unicode 6.0
được thực hiện bằng cách đặt tên cho một ký tự được sử dụng trong điện thoại di động của Nhật Bản là "BELL", điều này mâu thuẫn với
việc sử dụng lâu đời của ngành công nghiệp (và khuyến nghị sử dụng của Unicode) tên đó có nghĩa là
ký tự điều khiển ASCII tại U+0007. Do đó, tên đó không được dùng nữa trong Perl
kể từ v5.14 và bất kỳ việc sử dụng nó nào cũng sẽ đưa ra thông báo cảnh báo (trừ khi bị tắt). Tên
"ALERT" hiện là tên ưa thích cho điểm mã này, với "BEL" là tên viết tắt có thể chấp nhận được
hình thức. Tên của ký tự điện thoại di động mới, tại mã điểm U+1F514, vẫn chưa được xác định
trong phiên bản Perl này (do đó chúng tôi không triển khai hoàn toàn Unicode 6.1), nhưng bắt đầu
trong v5.18, BELL sẽ có nghĩa là ký tự này chứ không phải U+0007.

Unicode đã thực hiện các bước để đảm bảo rằng loại lỗi này không xảy ra nữa. Các
Tiêu chuẩn hiện nay bao gồm tất cả các tên và chữ viết tắt được chấp nhận rộng rãi để kiểm soát
ký tự, trong khi trước đó thì không (mặc dù có những tên được đề xuất cho hầu hết
chúng mà Perl đã sử dụng). Điều này có nghĩa là hầu hết những cái tên được đề xuất đó hiện nay
chính thức trong Tiêu chuẩn. Unicode không đề xuất tên cho bốn điểm mã
được liệt kê ở trên giữa U+008E và U+008F, và trong việc chuẩn hóa chúng, Unicode đã thay đổi một cách tinh vi
những cái tên mà Perl đã đặt cho chúng trước đó, bằng cách thay thế khoảng trống cuối cùng trong mỗi tên
bằng dấu gạch nối. Unicode cũng chính thức chấp nhận những cái tên mà Perl không dùng nữa, chẳng hạn như FILE
MÁY TÁCH. Bây giờ tên duy nhất không được dùng nữa là BELL. Cuối cùng, Perl bây giờ sử dụng công thức chính thức mới
tên thay vì tên cũ (hiện được coi là lỗi thời) cho bốn điểm mã đầu tiên trong
danh sách ở trên (danh sách có dấu ngoặc đơn trong đó).

Bây giờ các tên đã được đặt theo tiêu chuẩn Unicode, những thay đổi này sẽ
không xảy ra lần nữa, mặc dù vẫn có thể sửa chữa, chẳng hạn như U+2118.

Unicode cũng bổ sung thêm một số tên viết tắt mà Perl hiện chấp nhận: SP cho SPACE; TAB cho
BẢNG NHÂN VẬT; DÒNG MỚI, KẾT THÚC DÒNG, NL và EOL cho LINE FEED; LOCKING-SHIFT MỘT
cho SHIFT OUT; LOCKING-SHIFT ZERO cho SHIFT IN; và ZWNBSP cho KHÔNG GIAN CÓ CHIỀU RỘNG KHÔNG CÓ ĐỘ RỘNG.

Thông tin chi tiết hơn về phiên bản Unicode này được cung cấp trong
<http://www.unicode.org/versions/Unicode6.1.0/>.

"sử dụng tên quyến rũ" is Không còn cần thiết cho "\N{tên}"

Khi "\N{Tên}" gặp phải, mô-đun "charnames" hiện được tải tự động khi
cần thiết như thể các tùy chọn ":full" và ":short" đã được chỉ định. Xem charnames để biết thêm
thông tin.

"\N{...}" có thể tại Unicode lỏng lẻo tên phù hợp

Điều này được mô tả trong mục "charnames" trong "Mô-đun cập nhật và Pragmata" bên dưới.

Unicode tên

Perl hiện đã hỗ trợ thích hợp cho Unicode trong tên biểu tượng. Ngày xưa nó là "*{$foo}"
sẽ bỏ qua cờ UTF8 bên trong và sử dụng các byte của biểu diễn cơ bản để
tra cứu biểu tượng. Điều đó có nghĩa là "*{"\x{100}"}" và "*{"\xc4\x80"}" sẽ trả về
điều tương tự. Tất cả những phần này của Perl đã được sửa để phù hợp với Unicode:

· Tên phương thức (bao gồm cả tên được chuyển đến "sử dụng quá tải")

· Tên toàn cầu (bao gồm tên biến, chương trình con và tước hiệu tệp)

· Tên gói

· "đi đến"

· Hội thảo tượng trưng

· Đối số thứ hai của "bless()" và "tie()"

· Giá trị trả về của "ref()"

· Nguyên mẫu chương trình con

· Thuộc tính

· Nhiều cảnh báo và thông báo lỗi đề cập đến tên biến hoặc giá trị, phương thức,
và vv

Ngoài ra, một lỗi phân tích cú pháp đã được sửa khiến "*{e}" không thể trích dẫn ngầm
nhưng thay vào đó lại hiểu nó là "*{+e}", điều này sẽ gây ra vi phạm nghiêm trọng.

"*{"*a::b"}" tự động loại bỏ * nếu theo sau nó là một chữ cái ASCII. Cái đó
đã được mở rộng cho tất cả các ký tự nhận dạng Unicode.

Các biến không có dấu câu một ký tự không phải ASCII (như "$e") hiện thuộc phạm vi "Đã sử dụng"
chỉ một lần". Cảnh báo. Chúng từng được miễn trừ vì chúng được coi là dấu câu
biến.

Ngoài ra, các biến dấu chấm câu Unicode một ký tự (như $X) hiện được hỗ trợ [Perl
# 69032].

Cải thiện có khả năng đến pha địa phương bảng chữ cái, kể cả UTF-8 địa phương

Một tham số tùy chọn đã được thêm vào để "sử dụng ngôn ngữ"

sử dụng ngôn ngữ ': not_characters';

yêu cầu Perl sử dụng tất cả ngoại trừ phần "LC_CTYPE" và "LC_COLLATE" của dòng hiện tại
miền địa phương. Thay vào đó, bộ ký tự được coi là Unicode. Điều này cho phép các ngôn ngữ và
Unicode được kết hợp liền mạch, bao gồm cả các ngôn ngữ UTF-8 ngày càng phổ biến. Khi
bằng cách sử dụng dạng ngôn ngữ kết hợp này, lớp ":locale" cho pragma mở có thể được sử dụng để
giao diện với hệ thống tệp và có sẵn các mô-đun CPAN cho ARGV và
chuyển đổi biến môi trường.

Chi tiết đầy đủ có trong perllocale.

Mới chức năng "fc" tương ứng thoát trình tự "\F" cho Unicode cái cặp

Chữ thường Unicode là một phần mở rộng của chữ thường mang lại kết quả tốt hơn khi so sánh hai chữ
chuỗi không phân biệt chữ hoa chữ thường. Nó từ lâu đã được sử dụng nội bộ trong biểu thức chính quy "/i"
phù hợp. Bây giờ nó có sẵn một cách rõ ràng thông qua lệnh gọi hàm "fc" mới (được kích hoạt bởi
"sử dụng tính năng 'fc'" hoặc "sử dụng v5.16" hoặc có thể gọi rõ ràng qua "CORE::fc") hoặc thông qua
chuỗi "\F" mới trong chuỗi dấu ngoặc kép.

Chi tiết đầy đủ có trong "fc" trong perlfunc.

Sản phẩm Unicode "Script_Extensions" tài sản is tại được hỗ trợ.

Tính năng mới trong Unicode 6.0, đây là thuộc tính "Script" được cải tiến. Chi tiết có trong "Kịch bản" trong
perlunicode.

XS Những thay đổi
Cải thiện sơ đồ đánh máy cho Một số Được xây dựng trong Các loại

Hầu hết các tác giả XS sẽ biết có một lỗi tồn tại từ lâu trong sơ đồ kiểu OUTPUT cho T_AVREF
("AV*"), T_HVREF ("HV*"), T_CVREF ("CV*") và T_SVREF ("SVREF" hoặc "\$foo") yêu cầu
giảm thủ công số tham chiếu của giá trị trả về thay vì sơ đồ kiểu chữ
đang lo việc này. Để tương thích ngược, điều này không thể thay đổi theo mặc định
bản đồ kiểu chữ. Nhưng hiện tại chúng tôi cung cấp các bản đồ kiểu bổ sung "T_AVREF_REFCOUNT_FIXED", v.v.
không thể hiện lỗi này. Sử dụng chúng trong tiện ích mở rộng của bạn cũng đơn giản như có một dòng trong
phần "TYPEMAP" của bạn:

HV* T_HVREF_REFCOUNT_FIXED

"is_utf8_char()"

Hàm có thể gọi XS "is_utf8_char()", khi được trình bày với đầu vào UTF-8 không đúng định dạng, có thể
đọc tối đa 12 byte ở cuối chuỗi. Điều này không thể sửa được nếu không thay đổi
API của nó và do đó việc sử dụng nó hiện không còn được dùng nữa. Sử dụng "is_utf8_char_buf()" (chỉ mô tả
bên dưới) thay vào đó.

Thêm "is_utf8_char_buf()"

Chức năng này được thiết kế để thay thế chức năng " không được dùng nữais_utf8_char()"Chức năng. Nó
bao gồm một tham số bổ sung để đảm bảo nó không đọc quá phần cuối của bộ đệm đầu vào.

Nền tảng khác "is_utf8_foo()" chức năng, as cũng as "utf8_to_foo()", và vv

Hầu hết các hàm có thể gọi XS khác nhận đầu vào được mã hóa UTF-8 đều giả định rằng
UTF-8 hợp lệ (không đúng định dạng) đối với độ dài bộ đệm. Đừng làm những việc như
thay đổi kiểu chữ của một ký tự hoặc xem nó có phải là chữ và số mà không chắc chắn rằng nó đúng hay không
UTF-8 hợp lệ. Điều này có thể được thực hiện một cách an toàn cho toàn bộ chuỗi bằng cách sử dụng một trong các hàm
"is_utf8_string()", "is_utf8_string_loc()" và "is_utf8_string_loclen()".

Mới Tập giấy API

Nhiều chức năng mới đã được thêm vào API để thao tác với các bảng từ vựng. Xem "Tấm lót
Cấu trúc dữ liệu" trong perlapi để biết thêm thông tin.

Những thay đổi đến Reduct ® Biến
$$ có thể be giao đến

$$ được đặt ở chế độ chỉ đọc trong Perl 5.8.0. Nhưng chỉ đôi khi: "local $$" mới làm được điều đó
có thể ghi lại được. Một số mô-đun CPAN đang sử dụng mã "local $$" hoặc XS để bỏ qua quá trình đọc-
chỉ kiểm tra, vì vậy không có lý do gì để giữ $$ ở chế độ chỉ đọc. (Thay đổi này cũng cho phép xảy ra lỗi
được sửa trong khi vẫn duy trì khả năng tương thích ngược.)

$ ^ X chuyển đổi đến an tuyệt đối con đường on miễn phíBSD, OS X Solaris

$^X hiện được chuyển đổi thành đường dẫn tuyệt đối trên OS X, FreeBSD (không cần / proc gắn kết)
và Solaris 10 và 11. Điều này làm tăng thêm cách tiếp cận trước đây về việc sử dụng / proc trên Linux,
FreeBSD và NetBSD (trong mọi trường hợp, được gắn vào).

Điều này làm cho việc cài đặt Perl có thể định vị lại trở nên hữu ích hơn trên các nền tảng này. (Nhìn thấy
"Có thể định vị lại @INC" trong INSTALL)

Debugger Những thay đổi
Tính năng trong các trình sửa lỗi

Gói tính năng hiện tại của Perl hiện đã được kích hoạt cho các lệnh được nhập trong phần tương tác
trình gỡ lỗi.

Mới tùy chọn cho các trình gỡ lỗi t lệnh

Sản phẩm t lệnh trong trình gỡ lỗi, chuyển đổi chế độ theo dõi, hiện chấp nhận đối số số
xác định có bao nhiêu cấp độ của lệnh gọi chương trình con cần theo dõi.

"cho phép" "vô hiệu hóa"

Trình gỡ lỗi hiện có các lệnh "vô hiệu hóa" và "bật" để vô hiệu hóa các điểm ngắt hiện có
và kích hoạt lại chúng. Xem perldebug.

Điểm dừng với hồ sơ tên

Lệnh "b" của trình gỡ lỗi để đặt điểm dừng giờ đây cho phép số dòng được bắt đầu bằng
một tên tập tin. Xem "b [file]:[line] [condition]" trong perldebug.

Sản phẩm "CỐT LÕI" Không gian tên
Sản phẩm "CỐT LÕI::" tiếp đầu ngữ

Tiền tố "CORE::" hiện có thể được sử dụng trên các từ khóa được feature.pm bật, ngay cả bên ngoài
phạm vi "tính năng sử dụng".

Chương trình con in các "CỐT LÕI" không gian tên

Nhiều từ khóa Perl hiện có sẵn dưới dạng chương trình con trong không gian tên CORE. Điều này cho phép họ
được đặt bí danh:

BEGIN { *entangle = \&CORE::tie }
vướng víu $variable, $package, @args;

Và để các nguyên mẫu được bỏ qua:

sub mytie(\[%$*@]$@) {
của tôi ($ref, $pack, @args) = @_;
... làm việc gì đó ...
đi đến &CORE::tie;
}

Một số trong số này không thể được gọi thông qua tham chiếu hoặc qua cú pháp &foo, nhưng phải được gọi
như những lời trần trụi.

Xem CORE để biết chi tiết.

Nền tảng khác Những thay đổi
Nặc Danh xử lý

Các thẻ điều khiển tệp được tạo tự động hiện được đặt tên __ANONIO__ khi tên biến
không thể xác định được, thay vì $__ANONIO__.

Đã tự động điền loại Chương trình con

Giờ đây, các chương trình con sắp xếp tùy chỉnh có thể được tải tự động [Perl #30661]:

phụ TỰ ĐỘNG TẢI { ... }
@sorted = sắp xếp foo @list; # sử dụng TỰ ĐỘNG TẢI

"tiếp tục" Không còn đòi hỏi các "công tắc" tính năng

Từ khóa "tiếp tục" có hai nghĩa. Nó có thể giới thiệu khối "tiếp tục" sau một
vòng lặp hoặc nó có thể thoát khỏi khối "khi" hiện tại. Cho đến nay, ý nghĩa thứ hai vẫn còn hiệu lực
chỉ khi tính năng "chuyển đổi" được bật và mặt khác là lỗi cú pháp. Kể từ khi chính
Mục đích của feature.pm là tránh xung đột với các chương trình con do người dùng xác định, không có
lý do để "tiếp tục" phụ thuộc vào nó.

DTrace tàu thăm dò cho thông dịch viên giai đoạn thay đổi

Đầu dò "thay đổi pha" sẽ kích hoạt khi pha của trình thông dịch thay đổi, theo dõi
Biến "${^GLOBAL_PHASE}". "arg0" là tên giai đoạn mới; "arg1" là cái cũ. Cái này
hữu ích trong việc giới hạn công cụ của bạn ở một hoặc nhiều: thời gian biên dịch, thời gian chạy hoặc
phá hủy thời gian.

"__FILE__()" cú pháp

Các mã thông báo "__FILE__", "__LINE__" và "__PACKAGE__" hiện có thể được ghi bằng một cặp trống
dấu ngoặc đơn sau chúng. Điều này làm cho chúng phân tích theo cách tương tự như "thời gian", "ngã ba" và các từ khác
Chức năng tích hợp sẵn.

Sản phẩm "\$" nguyên mẫu chấp nhận bất kì vô hướng giá trị

Các nguyên mẫu chương trình con "\$" và "\[$]" hiện chấp nhận bất kỳ đối số giá trị vô hướng nào.
Trước đây họ chỉ chấp nhận các giá trị vô hướng bắt đầu bằng "$" và các phần tử băm và mảng.
Sự thay đổi này làm cho chúng phù hợp với cách thức các chức năng "đọc" và "recv" tích hợp sẵn
(trong số những người khác) phân tích lập luận của họ. Điều này có nghĩa là người ta có thể ghi đè cài đặt sẵn
các hàm với các chương trình con tùy chỉnh phân tích các đối số của chúng theo cùng một cách.

"_" in chương trình con nguyên mẫu

Ký tự "_" trong nguyên mẫu chương trình con hiện được cho phép trước "@" hoặc "%".

Bảo mật


Sử dụng "is_utf8_char_buf()" không "is_utf8_char()"
Hàm sau hiện không được dùng nữa vì API của nó không đủ để đảm bảo rằng nó
không đọc (tối đa 12 byte trong trường hợp xấu nhất) ngoài phần cuối của chuỗi đầu vào. Nhìn thấy
is_utf8_char_buf().

Không đúng định dạng UTF-8 đầu vào có thể gây ra nỗ lực đến đọc Ngoài các cuối of các đệm
Hiện đã có hai hàm XS mới có thể truy cập, "utf8_to_uvchr_buf()" và "utf8_to_uvuni_buf()"
có sẵn để ngăn chặn điều này và lõi Perl đã được chuyển đổi để sử dụng chúng. Nhìn thấy
"Thay đổi nội bộ".

"Tệp :: Glob :: bsd_glob ()" trí nhớ lôi với GLOB_ALTDIRFUNC (CVE-2011-2728).
Gọi "File :: Glob :: bsd_glob" với cờ không được hỗ trợ GLOB_ALTDIRFUNC sẽ gây ra
vi phạm truy cập / segfault. Chương trình Perl chấp nhận giá trị cờ từ bên ngoài
nguồn có thể khiến chính nó bị từ chối dịch vụ hoặc các cuộc tấn công thực thi mã tùy ý.
Không có khai thác được biết đến trong tự nhiên. Sự cố đã được khắc phục một cách rõ ràng
vô hiệu hóa tất cả các cờ không được hỗ trợ và đặt các con trỏ hàm không sử dụng thành null. Sâu bọ
báo cáo của Clement Lecigne. (5.14.2)

Đặc quyền đang tại định đúng khi nào phân công đến $(
Một lỗi giả định (có thể không thể khai thác được trong thực tế) do cài đặt sai
ID nhóm hiệu quả trong khi cài đặt $( đã được sửa. Lỗi này sẽ chỉ ảnh hưởng
các hệ thống có "setresgid()" nhưng không có "setregid()", nhưng không có hệ thống nào như vậy được biết đến
hiện hữu.

Không dùng nữa


Đừng đọc các Unicode dữ liệu cơ sở các tập tin in lib / unicore
Hiện tại, việc đọc trực tiếp các tệp cơ sở dữ liệu Unicode không còn được dùng nữa. Chúng được lưu trữ trong
các lib / unicore danh mục. Thay vào đó, bạn nên sử dụng các hàm mới trong Unicode::UCD.
Chúng cung cấp API ổn định và cung cấp thông tin đầy đủ.

Perl có thể tại một thời điểm nào đó trong tương lai sẽ thay đổi hoặc loại bỏ các tệp này. Tập tin đó
các ứng dụng có nhiều khả năng đã được sử dụng nhất là lib/unicore/ToDigit.pl. "prop_invmap ()"trong
Thay vào đó, Unicode::UCD có thể được sử dụng để lấy dữ liệu của nó.

XS chức năng "is_utf8_char()", "utf8_to_uvchr()" "utf8_to_uvuni()"
Hàm này không được dùng nữa vì nó có thể đọc vượt quá phần cuối của chuỗi đầu vào. Sử dụng
cái mới is_utf8_char_buf(), thay vào đó là "utf8_to_uvchr_buf()" và "utf8_to_uvuni_buf()".

Tương lai Không dùng nữa


Phần này phục vụ như một thông báo về các tính năng được Có khả năng bị loại bỏ hoặc không được dùng nữa trong
bản phát hành tiếp theo của Perl (5.18.0). Nếu mã của bạn phụ thuộc vào các tính năng này, bạn nên
liên hệ với Perl 5 Porters qua danh sách gửi thư
<http://lists.perl.org/list/perl5-porters.html> hoặc perlbug để giải thích trường hợp sử dụng của bạn và
thông báo quá trình khấu hao.

Trung tâm Modules
Các mô-đun này có thể được đánh dấu là không dùng nữa từ các cốt lõi. Điều này chỉ có nghĩa là họ sẽ
không còn được cài đặt theo mặc định với bản phân phối lõi nhưng sẽ vẫn có sẵn trên
CPAN.

· CPANPLUS

· Bộ lọc::Đơn giản

· PerlIO::mmap

· Nhóm::LaTeX

· Nhóm::Trình phân tích cú pháp

· Tự tải

· Văn bản::Soundex

· Chủ đề.pm

Nền tảng với Không hỗ trợ lập trình viên
Các nền tảng này có thể sẽ bị loại bỏ hỗ trợ xây dựng đặc biệt trong phiên bản 5.17.0
chuỗi phát triển.

· BeOS

· djgpp

· dgux

· EPOC

· MPE / iX

· Sử thi ca

· UTS

· VM/ESA

Nền tảng khác Tương lai Không dùng nữa
· Hoán đổi $ <và $>

Để biết thêm thông tin về việc ngừng sử dụng trong tương lai này, hãy xem vé RT có liên quan
.

· Sfio, stdio

Perl hỗ trợ được xây dựng mà không cần PerlIO thích hợp, sử dụng trình bao bọc stdio hoặc sfio
thay vì. Bản dựng Perl như thế này sẽ không hỗ trợ các lớp IO và do đó Unicode IO,
làm cho nó khá tàn tật.

PerlIO hỗ trợ lớp "stdio" nếu muốn sử dụng stdio và tương tự như vậy là lớp sfio
có thể được sản xuất.

· Chữ không thoát "{" trong biểu thức chính quy.

Ví dụ: bắt đầu từ v5.20, dự kiến ​​sẽ yêu cầu ký tự "{" theo nghĩa đen phải được thoát
bằng cách đặt trước nó một dấu gạch chéo ngược. Trong v5.18, một thông báo cảnh báo không được dùng nữa sẽ
phát ra cho tất cả các mục đích sử dụng như vậy. Điều này chỉ ảnh hưởng đến các mẫu phù hợp với nghĩa đen
"{". Các cách sử dụng khác của ký tự này, chẳng hạn như một phần của bộ định lượng hoặc trình tự như trong
những điều dưới đây, hoàn toàn không bị ảnh hưởng:

/foo{3,5}/
/\p{Chữ cái}/
/\N{CHỮ SỐ 0}

Việc loại bỏ phần này sẽ cho phép mở rộng cú pháp mẫu của Perl và cải thiện lỗi
kiểm tra cú pháp hiện có. Xem "Bộ định lượng" trong Perlre để biết ví dụ.

· Cải tiến ngữ nghĩa "\ Q" trong chuỗi kép quotish khi kết hợp với các cách thoát khác.

Có một số lỗi và sự mâu thuẫn liên quan đến sự kết hợp của "\ Q" và thoát
như "\ x", "\ L", v.v., trong cặp "\ Q ... \ E". Chúng cần được sửa và làm như vậy
nhất thiết sẽ thay đổi hành vi hiện tại. Các thay đổi vẫn chưa được giải quyết.

Không tương thích Những thay đổi


Reduct ® khối gọi là in làm mất hiệu lực bối cảnh
Các khối đặc biệt ("BEGIN", "CHECK", "INIT", "UNITCHECK", "END") hiện được gọi là void
bối cảnh. Điều này tránh việc sao chép lãng phí kết quả của câu lệnh cuối cùng [Perl #108794].

Sản phẩm "quá tải" thực dụng regexp đối tượng
Với "không quá tải", các đối tượng biểu thức chính quy được trả về bởi "qr//" hiện đã được xâu chuỗi
là "Regexp=ĐĂNG KÝ(0xbe600d)" thay vì chính biểu thức chính quy [Perl #108780].

Hai XS sơ đồ đánh máy Mục loại bỏ
Hai mục nhập sơ đồ kiểu XS có lẽ không được sử dụng đã bị xóa khỏi sơ đồ kiểu lõi:
T_DATAUNIT và T_CALLBACK. Nếu bạn là người sử dụng những thứ này, bất chấp mọi khó khăn, vui lòng xem
hướng dẫn cách khôi phục chúng trong perlxstypemap.

Unicode 6.1 không tương thích với Unicode 6.0
Đây là chi tiết trong phần "Hỗ trợ (gần như) Unicode 6.1" ở trên. Bạn có thể biên dịch phiên bản này
của Perl sử dụng Unicode 6.0. Xem phần "Hacking Perl để hoạt động trên các phiên bản Unicode cũ hơn (đối với
chỉ dành cho những tin tặc rất nghiêm túc)" trong perlunicode.

Borland trình biên dịch
Tất cả hỗ trợ cho trình biên dịch Borland đã bị loại bỏ. Mã đã không hoạt động trong một thời gian dài
dù sao cũng có thời gian.

Một số phản đối Unicode tài sản đang Không còn hỗ trợ by mặc định
Perl không bao giờ nên để lộ một số thuộc tính Unicode nhất định được Unicode sử dụng
nội bộ và không có nghĩa là có sẵn công khai. Việc sử dụng những thứ này đã tạo ra sự phản đối
thông báo cảnh báo kể từ Perl 5.12. Các thuộc tính bị loại bỏ là Other_Alphabetic,
Other_Default_Ignorable_Code_Point, Other_Grapheme_Extend, Other_ID_Continue,
Other_ID_Start, Other_Lowercase, Other_Math và Other_Uppercase.

Perl có thể được biên dịch lại để bao gồm bất kỳ hoặc tất cả chúng; hướng dẫn được đưa ra trong "Unicode
thuộc tính ký tự KHÔNG được Perl chấp nhận" trong perluniprops.

Tham khảo ý kiến IO đồ vật as máy đánh chữ
Toán tử "*{...}", khi được chuyển một tham chiếu đến một đối tượng IO (như trong "*{*STDIN{IO}}"),
tạo một kiểu chữ mới chỉ chứa đối tượng IO đó. Trước đây, nó sẽ xâu chuỗi thành
một chuỗi rỗng, nhưng một số toán tử sẽ coi nó là chuỗi không xác định, tạo ra một chuỗi
cảnh báo "chưa được khởi tạo". Bây giờ nó được xâu chuỗi thành __ANONIO__ [Perl #96326].

Đã xác định người dùng thay đổi trường hợp hoạt động
Tính năng này không được dùng nữa trong Perl 5.14 và hiện đã bị xóa. Mô-đun CPAN
Unicode::Casing cung cấp chức năng tốt hơn mà không có nhược điểm mà tính năng này gặp phải,
như được trình bày chi tiết trong tài liệu 5.14:
<http://perldoc.perl.org/5.14.0/perlunicode.html# Bản đồ trường hợp do người dùng xác định-% 28cho-nghiêm túc-chỉ dành cho tin tặc% 29>

XSUB đang tại 'tĩnh'
Các hàm XSUB C hiện ở dạng 'tĩnh', nghĩa là chúng không thể nhìn thấy được từ bên ngoài
đơn vị biên soạn. Người dùng có thể sử dụng "XS_EXTERNAL(name)" và "XS_INTERNAL(name)" mới
macro để chọn hành vi liên kết mong muốn. Tuyên bố "XS(name)" thông thường cho
XSUB sẽ tiếp tục khai báo XSUB không 'tĩnh' để tương thích, nhưng trình biên dịch XS,
ExtUtils::ParseXS ("xsubpp") sẽ phát ra XSUB 'tĩnh' theo mặc định. ExtUtils::ParseXS
hành vi có thể được cấu hình lại từ XS bằng cách sử dụng từ khóa "EXPORT_XSUB_SYMBOLS". Xem Perlx
để biết thêm chi tiết.

Làm suy yếu chỉ đọc tài liệu tham khảo
Làm suy yếu các tài liệu tham khảo chỉ đọc không còn được phép. Lẽ ra nó không bao giờ có tác dụng
dù sao đi nữa, và đôi khi có thể dẫn đến sự cố.

Buộc vô hướng việc này tổ chức máy đánh chữ
Thay vào đó, việc cố gắng buộc một đại lượng vô hướng sau khi một kiểu chữ được gán cho nó sẽ buộc
xử lý trong khe IO của typeglob. Điều này có nghĩa là không thể ràng buộc vô hướng
chính nó. Các vấn đề tương tự ảnh hưởng đến "bị ràng buộc" và "cởi trói": "bị ràng buộc $scalar" sẽ trả về sai
trên một vô hướng bị ràng buộc nếu thứ cuối cùng được trả về là một kiểu chữ và "cởi trói $ vô hướng" trên một kiểu chữ như vậy
vô hướng bị ràng buộc sẽ không làm gì cả.

Chúng tôi đã khắc phục sự cố này trước Perl 5.14.0, nhưng nó gây ra sự cố với một số mô-đun CPAN,
vì vậy thay vào đó chúng tôi đưa vào chu trình ngừng sử dụng.

Hiện tại, việc ngừng sử dụng đã được xóa và lỗi này đã được sửa. Vì vậy, "buộc $scalar" sẽ
luôn luôn buộc vô hướng chứ không phải tay cầm mà nó giữ. Để buộc tay cầm, sử dụng "tie *$scalar"
(có dấu hoa thị rõ ràng). Điều tương tự cũng áp dụng cho "bị ràng buộc *$vô hướng" và "cởi trói *$vô hướng".

IPC :: Open3 Không còn cung cấp "xfork()", "xclose_on_exec()" "xpipe_anon()"
Tất cả ba chức năng đều riêng tư, không có giấy tờ và không được xuất khẩu. Họ dường như không
được sử dụng bởi bất kỳ mã nào trên CPAN. Hai đã được nội tuyến và một đã bị xóa hoàn toàn.

$$ Không còn lưu trữ PID
Trước đây, nếu người ta gọi ngã ba(3) từ C, khái niệm $$ của Perl có thể không đồng bộ với
getpid () trở lại. Bằng cách luôn tìm nạp giá trị của $$ thông qua getpid (), tiềm năng này
lỗi được loại bỏ. Mã phụ thuộc vào hành vi lưu vào bộ nhớ đệm sẽ bị hỏng. Như được mô tả trong
Các cải tiến cốt lõi, $$ hiện có thể ghi nhưng nó sẽ được đặt lại trong quá trình phân nhánh.

$$ "getppid()" Không còn thi đua POSIX ngữ nghĩa Dưới chủ đề Linux
Mô phỏng POSIX của $$ và "getppid()" trong quá trình triển khai LinuxThreads lỗi thời
đã bị loại bỏ. Điều này chỉ ảnh hưởng đến người dùng Linux 2.4 và người dùng Debian GNU/kFreeBSD
lên đến và bao gồm 6.0, không phải phần lớn các bản cài đặt Linux sử dụng NPTL
chủ đề.

Điều này có nghĩa là "getppid()", giống như $$, hiện tại luôn được đảm bảo trả về ý tưởng của hệ điều hành về
trạng thái hiện tại của tiến trình, không phải phiên bản được lưu trong bộ nhớ đệm của Perl.

Xem tài liệu về $$ để biết chi tiết.

$ <, $>, $( $) đang Không còn lưu trữ
Tương tự như những thay đổi đối với $$ và "getppid()", bộ nhớ đệm nội bộ của $<, $>, $( và $)
đã bị loại bỏ.

Khi chúng tôi lưu trữ những giá trị này vào bộ nhớ đệm, ý tưởng của chúng tôi về chúng sẽ không đồng bộ với
thực tế nếu ai đó (ví dụ: ai đó nhúng Perl) gọi là "sete?[ug]id()" mà không cập nhật
"PL_e?[ug]id". Việc phải đối mặt với sự phức tạp này không đáng vì giá thành quá rẻ.
Lệnh gọi hệ thống "gete?[ug]id()" là.

Thay đổi này sẽ phá vỡ một số mô-đun CPAN sử dụng "PL_uid", "PL_gid" cấp XS
Biến "PL_euid" hoặc "PL_egid".

Cách khắc phục những sự cố đó là sử dụng "PerlProc_gete?[ug]id()" để truy xuất chúng (ví dụ:
"PerlProc_getuid()") và không gán cho "PL_e?[ug]id" nếu bạn thay đổi
UID/GID/EUID/EGID. Không cần phải làm như vậy nữa vì Perl sẽ luôn truy xuất
phiên bản cập nhật của các giá trị đó từ HĐH.

Cái nào Không phải ASCII nhân vật được trích dẫn by "trích dẫn" "\ Q" thay đổi
Điều này khó có thể dẫn đến một vấn đề thực sự, vì Perl không gắn ý nghĩa đặc biệt cho
bất kỳ ký tự nào không phải ASCII, vì vậy hiện tại nó không liên quan đến việc có trích dẫn hay không. Cái này
thay đổi sửa lỗi [Perl #77654] và làm cho hành vi của Perl phù hợp hơn với Unicode
khuyến nghị. Xem "quotemeta" trong perlfunc.

HIỆU QUẢ Cải tiến


· Cải thiện hiệu suất cho các thuộc tính Unicode trong biểu thức chính quy

Việc khớp điểm mã với thuộc tính Unicode hiện được thực hiện thông qua tìm kiếm nhị phân
thay vì tuyến tính. Điều này có nghĩa là ví dụ trường hợp xấu nhất đối với một mặt hàng 1000
thuộc tính là 10 đầu dò thay vì 1000. Sự kém hiệu quả này đã được bù đắp trong
quá khứ bằng cách lưu trữ vĩnh viễn trong hàm băm các kết quả của một cuộc thăm dò nhất định cộng với
kết quả cho 64 điểm mã liền kề, theo lý thuyết rằng các điểm mã gần nhau là
có khả năng được tìm kiếm. Một hàm băm riêng biệt được sử dụng cho mỗi lần đề cập đến Unicode
thuộc tính trong mỗi biểu thức chính quy. Do đó, "qr/\p{foo}abc\p{foo}/" sẽ tạo ra hai
băm. Bất kỳ thăm dò nào trong một trường hợp sẽ không được biết đến đối với trường hợp khác và các giá trị băm
có thể mở rộng riêng biệt thành khá lớn nếu biểu thức chính quy được sử dụng trên nhiều
các điểm mã được phân tách rộng rãi khác nhau. Tuy nhiên, bây giờ chỉ có một hàm băm được chia sẻ
bởi tất cả các trường hợp của một thuộc tính nhất định. Điều này có nghĩa là nếu "\p{foo}" khớp với
"A" trong một biểu thức chính quy trong một chuỗi, kết quả sẽ được tất cả mọi người biết ngay lập tức
các biểu thức chính quy và quá trình sử dụng hết bộ nhớ không ngừng bị chậm lại
đáng kể.

· Khai báo phiên bản với từ khóa "use" (ví dụ: "use 5.012") giờ đây nhanh hơn, như
họ kích hoạt các tính năng mà không cần tải tính năng.pm.

· "local $_" bây giờ nhanh hơn, vì nó không còn lặp lại thông qua phép thuật mà nó không hoạt động nữa
để sao chép dù sao.

· Perl 5.12.0 tăng tốc độ phá hủy các đối tượng có lớp xác định "PHÁT HỦY" trống
các phương thức (để ngăn chặn việc tự động tải), bằng cách đơn giản là không gọi các phương thức trống như vậy. Cái này
bản phát hành đưa việc tối ưu hóa này tiến thêm một bước nữa bằng cách không gọi bất kỳ phương thức "PHÁT HỦY" nào
bắt đầu bằng câu lệnh "return". Điều này có thể hữu ích cho các hàm hủy
chỉ được sử dụng để gỡ lỗi:

sử dụng hằng số DEBUG => 1;
sub DESTROY { trả lại trừ khi DEBUG; ... }

Việc gấp liên tục sẽ giảm câu lệnh đầu tiên thành "return;" nếu DEBUG được đặt thành 0,
kích hoạt tối ưu hóa này.

· Việc gán cho một biến chứa vô hướng kiểu chữ hoặc sao chép khi ghi hiện nay đã nhiều
nhanh hơn. Trước đây, typeglob sẽ được xâu chuỗi hoặc vô hướng sao chép khi ghi
sẽ được sao chép trước khi bị ghi đè.

· Việc gán cho "substr" trong ngữ cảnh trống hiện nhanh hơn gấp đôi tốc độ trước đó.
Thay vì tạo và trả về một giá trị vô hướng lvalue đặc biệt được gán cho,
"substr" tự sửa đổi chuỗi gốc.

· "substr" không còn tính toán giá trị trả về khi được gọi trong ngữ cảnh void.

· Do những thay đổi trong File::Glob, hàm "glob" của Perl và hàm tương đương "<...>" của nó là
bây giờ nhanh hơn nhiều. Việc tách mẫu thành các từ đã được viết lại bằng C,
dẫn đến tăng tốc 20% trong một số trường hợp.

Điều này không ảnh hưởng đến "toàn cầu" trên VMS vì nó không sử dụng File::Glob.

· Các toán tử đoản mạch "&&", "||", và "//", khi được xâu chuỗi (chẳng hạn như "$a || $b
|| $c"), hiện bị đoản mạch nhanh hơn đáng kể do giảm quang điện
đi ngang.

· Việc thực hiện "s///r" làm giảm đi một bản sao của giá trị vô hướng.

· Các cuộc gọi đệ quy đến các chương trình con lvalue trong bối cảnh vô hướng lvalue sử dụng ít bộ nhớ hơn.

Modules Thực dụng


Phản đối Modules
Phiên bản :: Yêu cầu
Phiên bản::Yêu cầu hiện không được dùng nữa, hãy sử dụng CPAN::Meta::Requirements, là một
Thay thế thả. Nó sẽ bị xóa khỏi perl.git blead trong v5.17.0.

Mới Modules Thực dụng
· arybase -- mô-đun mới này triển khai biến $[.

· PerlIO::mmap 0.010 đã được thêm vào lõi Perl.

Lớp PerlIO "mmap" không còn được Perl triển khai nữa mà đã được di chuyển
vào mô-đun PerlIO::mmap mới.

cập nhật Modules Thực dụng
Đây chỉ là tổng quan về các bản cập nhật mô-đun đã chọn. Để có danh sách đầy đủ các bản cập nhật, hãy chạy:

$ danh sách chính --diff 5.14.0 5.16.0

Bạn cũng có thể thay thế phiên bản yêu thích của mình thay cho phiên bản 5.14.0.

· Lưu trữ :: Giải nén đã được nâng cấp từ phiên bản 0.48 lên 0.58.

Bao gồm bản sửa lỗi để FreeBSD chỉ sử dụng "giải nén" nếu nó nằm ở "/ usr / local / bin",
vì FreeBSD 9.0 sẽ xuất xưởng với khả năng "giải nén" giới hạn trong "/ usr / bin".

· Lưu trữ :: Tar đã được nâng cấp từ phiên bản 1.76 lên 1.82.

Các điều chỉnh để xử lý các tệp >8gb (>0777777777777 bát phân) và một tính năng để trả về
MD5SUM của các tập tin trong kho lưu trữ.

· Cơ sở đã được nâng cấp từ phiên bản 2.16 lên 2.18.

"base" không còn đặt $VERSION của mô-đun thành "-1" khi mô-đun mà nó tải không còn nữa
xác định $VERSION. Thay đổi này được thực hiện vì "-1" không phải là phiên bản hợp lệ
theo tiêu chí "lỏng lẻo" mới được sử dụng nội bộ bởi "UNIVERSAL::VERSION". (Nhìn thấy
phiên bản để biết thêm về tiêu chí phiên bản "lỏng lẻo".)

"base" không còn bỏ qua việc tải các mô-đun nội bộ mà nó đã tải và thay vào đó
dựa vào "yêu cầu" để kiểm tra %INC. Điều này sửa lỗi khi sử dụng "base" với mã
xóa %INC để buộc tải lại mô-đun.

· Cá chép đã được nâng cấp từ phiên bản 1.20 lên 1.26.

Bây giờ nó bao gồm thông tin xử lý tệp đã đọc lần cuối và đặt dấu chấm sau tệp và dòng
số, giống như lỗi từ "die" [Perl #106538].

· charnames đã được cập nhật từ phiên bản 1.18 lên 1.30.

"charnames" giờ đây có thể được gọi bằng tùy chọn mới, ":loose", giống như tùy chọn hiện có
Tùy chọn ":full", nhưng cho phép khớp tên lỏng lẻo bằng Unicode. Chi tiết có trong "LOOSE
MATCHES" trong charnames.

· B::Deparse đã được nâng cấp từ phiên bản 1.03 lên 1.14. Điều này khắc phục nhiều sự cố
lỗi.

· CGI đã được nâng cấp từ phiên bản 3.52 lên 3.59.

Nó sử dụng API FCGI.pm công khai và được ghi lại trong CGI::Fast. CGI::Fast đang sử dụng một
API FCGI không được dùng nữa và bị xóa khỏi tài liệu hơn mười năm trước.
Việc sử dụng API không được dùng nữa này với FCGI >= 0.70 hoặc FCGI <= 0.73 sẽ dẫn đến bảo mật
vấn đề.
<http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-2766>

Những điều có thể phá vỡ mã của bạn:

"url()" đã được sửa để trả về "PATH_INFO" khi được yêu cầu rõ ràng bằng một trong hai
cờ "path=>1" hoặc "path_info=>1".

Nếu mã của bạn đang chạy theo mod_rewrite (hoặc tương thích) và bạn đang gọi
"self_url()" hoặc bạn đang gọi "url()" và truyền "path_info=>1", các phương thức này sẽ
thực sự đang quay lại "PATH_INFO" ngay bây giờ, như bạn đã yêu cầu rõ ràng hoặc
"self_url()" đã thay mặt bạn yêu cầu.

"PATH_INFO" đã bị bỏ qua trong các URL như vậy kể từ khi sự cố được đưa ra trong
3.12 phát hành vào tháng 2005 năm XNUMX.

Lỗi này quá cũ nên ứng dụng của bạn có thể đã phụ thuộc vào nó hoặc tìm cách khắc phục.
Kiểm tra ứng dụng trước khi nâng cấp lên phiên bản này.

Ví dụ về các cuộc gọi phương thức bị ảnh hưởng:

$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();

Chúng tôi không còn đọc từ STDIN khi Độ dài nội dung không được đặt, ngăn chặn các yêu cầu
không có Độ dài nội dung đôi khi bị đóng băng. Điều này phù hợp với CGI RFC
3875 và cũng phù hợp với CGI::Simple. Tuy nhiên, hành vi cũ có thể có
được mong đợi bởi một số cách sử dụng dòng lệnh của CGI.pm.

Ngoài ra, động từ DELETE HTTP hiện được hỗ trợ.

· Compress::Zlib đã được nâng cấp từ phiên bản 2.035 lên 2.048.

IO::Compress::Zip và IO::Uncompress::Unzip hiện có hỗ trợ cho LZMA (phương pháp 14).
Đã có bản sửa lỗi cho sự cố CRC trong IO::Compress::Unzip và nó hỗ trợ Streamed Stored
bối cảnh bây giờ. Và đã khắc phục sự cố Zip64 trong IO::Compress::Zip khi kích thước nội dung là
chính xác là 0xFFFFFFFF.

· Digest :: SHA đã được nâng cấp từ phiên bản 5.61 lên 5.71.

Đã thêm chế độ BITS vào phương thức addfile và shasum. Điều này làm cho đầu vào một phần byte
có thể thông qua các tệp/STDIN và cho phép shasum kiểm tra tất cả các vectơ 8074 NIST Msg, trong đó
trước đây cần có chương trình đặc biệt để thực hiện việc này.

· Mã hóa đã được nâng cấp từ phiên bản 2.42 lên 2.44.

Đã thêm bí danh bị thiếu, sửa lỗi đệ quy sâu và cập nhật nhiều tài liệu khác nhau.

Khắc phục lỗi bảo mật 'decode_xs n-byte heap-overflow' trong Unicode.xs (CVE-2011-2939).
(5.14.2)

· ExtUtils::CBuilder được cập nhật từ phiên bản 0.280203 lên 0.280206.

Phiên bản mới gắn thêm CFLAGS và LDFLAGS vào các bản sao Config.pm của chúng.

· ExtUtils :: ParseXS đã được nâng cấp từ phiên bản 2.2210 lên 3.16.

Phần lớn ExtUtils::ParseXS, mô-đun đằng sau trình biên dịch XS "xsubpp", đã được viết lại
và dọn dẹp. Nó đã được mở rộng hơn một chút và bây giờ cuối cùng đã sử dụng
sự nghiêm khắc.

Logic bản đồ kiểu chữ đã được chuyển vào một mô-đun riêng biệt, ExtUtils::Typemaps. Xem "Mới
Mô-đun và Pragmata", ở trên.

Để biết đầy đủ các thay đổi, vui lòng xem nhật ký thay đổi ExtUtils::ParseXS, có sẵn
trên CPAN.

· File :: Glob đã được nâng cấp từ phiên bản 1.12 lên 1.17.

Trên Windows, phần mở rộng dấu ngã (~) hiện kiểm tra biến môi trường "USERPROFILE",
sau khi kiểm tra "HOME".

Nó có thẻ xuất ":bsd_glob" mới, nhằm thay thế ":glob". Giống như ":glob" nó
ghi đè "toàn cầu" bằng một hàm không chia mẫu toàn cầu thành các từ, nhưng,
không giống như ":glob", nó lặp lại đúng cách trong ngữ cảnh vô hướng, thay vì trả về kết quả cuối cùng
tập tin.

Có những thay đổi khác ảnh hưởng đến toán tử "toàn cầu" của Perl (sử dụng File::Glob
nội bộ, ngoại trừ trên VMS). Xem "Cải tiến hiệu suất" và "Sửa lỗi đã chọn".

· FindBin được cập nhật từ phiên bản 1.50 lên 1.51.

Nó không còn trả về kết quả sai nếu tập lệnh có cùng tên với tập lệnh hiện tại
tồn tại trong đường dẫn và có thể thực thi được.

· HTTP :: Tiny đã được nâng cấp từ phiên bản 0.012 lên 0.017.

Đã thêm hỗ trợ sử dụng $ENV{http_proxy} để đặt máy chủ proxy mặc định.

Thêm các phương thức tốc ký bổ sung cho tất cả các động từ HTTP phổ biến, phương thức "post_form()"
dành cho dữ liệu POST-ing x-www-form-urlencoded và phương thức tiện ích "www_form_urlencode()".

· IO đã được nâng cấp từ phiên bản 1.25_04 lên 1.25_06 và IO::Handle từ phiên bản 1.31
để 1.33.

Cùng với nhau, những nâng cấp này khắc phục sự cố với "getline" và "getlines" của IO::Handle
phương pháp. Khi các phương thức này được gọi trên bộ điều khiển ARGV đặc biệt, tệp tiếp theo là
tự động mở, như xảy ra với các hàm "<>" và "readline" tích hợp sẵn.
Tuy nhiên, không giống như các phương thức tích hợp sẵn, các phương thức này không tôn trọng việc người gọi sử dụng
mở pragma và áp dụng các lớp I/O thích hợp cho tệp mới mở
[rt.cpan.org # 66474].

· IPC :: Cmd đã được nâng cấp từ phiên bản 0.70 lên 0.76.

Việc ghi lại đầu ra lệnh (cả "STDOUT" và "STDERR") hiện được hỗ trợ bằng cách sử dụng
IPC::Open3 trên MSWin32 mà không yêu cầu IPC::Run.

· IPC :: Open3 đã được nâng cấp từ phiên bản 1.09 lên 1.12.

Sửa lỗi ngăn cản việc sử dụng "open3" trên Windows khi *STDIN, *STDOUT hoặc *STDERR
đã được bản địa hóa.

Sửa lỗi ngăn chặn việc sao chép bộ mô tả tệp số trên Windows.

"open3" với "-" để tên chương trình hoạt động trở lại. Điều này đã bị hỏng trong phiên bản
1.06 (và do đó có trong Perl 5.14.0) [Perl #95748].

· Ngôn ngữ :: Các mã đã được nâng cấp từ phiên bản 3.16 lên 3.21.

Đã thêm mã mở rộng ngôn ngữ (langext) và mã biến thể ngôn ngữ (langvar) làm
được xác định trong sổ đăng ký ngôn ngữ IANA.

Đã thêm mã ngôn ngữ từ ISO 639-5

Đã thêm mã ngôn ngữ/tập lệnh từ sổ đăng ký thẻ phụ ngôn ngữ IANA

Đã sửa lỗi cảnh báo giá trị chưa được khởi tạo [rt.cpan.org #67438].

Đã sửa giá trị trả về cho các hàm all_XXX_codes và all_XXX_names [rt.cpan.org
# 69100].

Tổ chức lại các mô-đun để di chuyển Locale::MODULE sang Locale::Codes::MODULE để cho phép
bổ sung trong tương lai sạch hơn. Bốn mô-đun ban đầu (Locale::Language,
Locale::Currency, Locale::Country, Locale::Script) sẽ tiếp tục hoạt động, nhưng tất cả đều mới
bộ mã sẽ được thêm vào không gian tên Locale::Codes.

Các hàm code2XXX, XXX2code, all_XXX_codes và all_XXX_names hiện hỗ trợ đã ngừng hoạt động
mã. Bây giờ tất cả các bộ mã có thể được chỉ định bởi một hằng số hoặc theo tên của chúng. Trước đây,
chúng chỉ được xác định bằng một hằng số.

Hàm alias_code tồn tại để tương thích ngược. Nó đã được thay thế bởi
đổi tên_country_code. Hàm alias_code sẽ bị xóa sau một thời gian
Tháng Chín, 2013.

Tất cả công việc hiện được thực hiện trong mô-đun trung tâm (Locale::Codes). Trước đây, một số đã
vẫn được thực hiện trong các mô-đun trình bao bọc (Locale::Codes::*). Đã thêm mã Nhóm ngôn ngữ
(langfam) như được định nghĩa trong ISO 639-5.

· Math::BigFloat đã được nâng cấp từ phiên bản 1.993 lên 1.997.

Phương thức "numify" đã được sửa để trả về số Perl đã chuẩn hóa (kết quả
của "0 + $thing"), thay vì một chuỗi [rt.cpan.org #66732].

· Math :: BigInt đã được nâng cấp từ phiên bản 1.994 lên 1.998.

Nó cung cấp một phương thức "bsgn" mới bổ sung cho phương thức "babs".

Nó khắc phục việc xử lý "đối tượng bên ngoài" của chức năng "đối tượng hóa" bên trong để chúng
được chuyển đổi sang lớp thích hợp (Math::BigInt hoặc Math::BigFloat).

· Math :: BigRat đã được nâng cấp từ phiên bản 0.2602 lên 0.2603.

"int()" trên đối tượng Math::BigRat chứa -1/2 hiện tạo một đối tượng Math::BigInt chứa
0 chứ không phải -0. Math::BigInt thậm chí không hỗ trợ số XNUMX âm, do đó kết quả là
đối tượng thực sự không đúng định dạng [Perl #95530].

· Math::Complex đã được nâng cấp từ phiên bản 1.56 lên 1.59 và Math::Trig từ phiên bản
1.2 đến 1.22.

Các bản sửa lỗi bao gồm: sử dụng đúng hàm tạo bản sao; sửa định dạng phân cực bằng số
công cụ xác định định dạng; và thuật toán "Great_circle_direction" ổn định hơn.

· Mô-đun :: CoreList đã được nâng cấp từ phiên bản 2.51 lên 2.66.

Tiện ích "corelist" bây giờ hiểu tùy chọn "-r" để hiển thị bản phát hành Perl
ngày và tùy chọn "--diff" để in tập hợp các thay đổi modlib giữa hai Perl
các bản phân phối.

· Mô-đun :: Siêu dữ liệu đã được nâng cấp từ phiên bản 1.000004 lên 1.000009.

Thêm phương thức "cung cấp" để tạo CPAN META cung cấp cấu trúc dữ liệu chính xác; sử dụng
của "package_versions_from_directory" không được khuyến khích.

· ODBM_File đã được nâng cấp từ phiên bản 1.10 lên 1.12.

Mã XS hiện được biên dịch bằng "PERL_NO_GET_CONTEXT", điều này sẽ hỗ trợ hiệu suất
dưới ithreads.

· open đã được nâng cấp từ phiên bản 1.08 lên 1.10.

Nó không còn tắt các lớp trên các tay cầm tiêu chuẩn khi được gọi mà không có ":std"
chỉ thị. Tương tự, khi được gọi với lệnh ":std", bây giờ nó sẽ xóa các lớp trên
STDERR trước khi áp dụng những cái mới, không chỉ trên STDIN và STDOUT [perl #92728].

· tình trạng quá tải đã được nâng cấp từ phiên bản 1.13 lên 1.18.

"overload::Overloaded" không còn gọi "can" trên lớp nữa mà sử dụng một phương tiện khác để
xác định xem đối tượng có bị quá tải hay không. Nó không bao giờ đúng khi gọi nó
"có thể", vì quá tải không tôn trọng AUTOLOAD. Vì vậy các lớp tự động tải các phương thức và
việc triển khai "có thể" không còn phải tính đến tình trạng quá tải [Perl #40333].

Một cảnh báo hiện được tạo ra cho các đối số không hợp lệ. Xem "Chẩn đoán mới".

· PerlIO :: vô hướng đã được nâng cấp từ phiên bản 0.11 lên 0.14.

(Đây là mô-đun thực hiện "open $fh, '>', \$scalar".)

Nó khắc phục sự cố với "open my $ fh,"> ", \ $ scalar" không hoạt động nếu $ scalar là một bản sao-
vô hướng khi ghi. (5.14.2)

Nó cũng sửa lỗi treo xảy ra với "readline" hoặc "<$fh>" nếu một kiểu chữ đã được
được gán cho $scalar [Perl #92258].

Nó không còn giả định trong quá trình "tìm kiếm" rằng $scalar là một chuỗi bên trong. Nếu không
gặp sự cố, gần như đã xảy ra sự cố [Perl #92706]. Ngoài ra, quy trình in nội bộ không
còn giả định rằng vị trí được đặt bởi "tìm kiếm" là hợp lệ, nhưng mở rộng chuỗi thành
vị trí đó, lấp đầy các byte ở giữa (giữa độ dài cũ và độ dài tìm kiếm
vị trí) có giá trị rỗng [Perl #78980].

Việc in tới một bộ điều khiển trong bộ nhớ hiện hoạt động nếu $scalar giữ một tham chiếu,
xâu chuỗi tham chiếu trước khi sửa đổi nó. Tài liệu tham khảo từng được coi là
chuỗi trống.

Việc in tới một bộ điều khiển trong bộ nhớ không còn gặp sự cố nếu $scalar tình cờ giữ một giá trị
số nội bộ, nhưng không có bộ đệm chuỗi.

Việc in tới một bộ điều khiển trong bộ nhớ không còn tạo ra các giá trị vô hướng gây nhầm lẫn cho các giá trị thông thường
công cụ biểu thức [Perl #108398].

· Pod :: Các chức năng đã được nâng cấp từ phiên bản 1.04 lên 1.05.

Hàm.pm hiện được tạo tại thời điểm xây dựng Perl từ các chú thích trong perlfunc.pod.
Điều này sẽ đảm bảo rằng Pod::Functions và perlfunc vẫn được đồng bộ hóa.

· Pod :: Html đã được nâng cấp từ phiên bản 1.11 lên 1.1502.

Đây là bản viết lại mở rộng của Pod::Html để sử dụng Pod::Đơn giản. Các
đầu ra đã thay đổi đáng kể.

· Pod::Perldoc đã được nâng cấp từ phiên bản 3.15_03 lên 3.17.

Nó sửa đường dẫn tìm kiếm trên VMS [Perl #90640]. (5.14.1)

Sản phẩm -v tùy chọn hiện tìm nạp phần bên phải với giá 0 USD.

Bản nâng cấp này có nhiều bản sửa lỗi đáng kể. Tham khảo nhật ký thay đổi của nó trên CPAN để biết
thêm thông tin.

· POSIX đã được nâng cấp từ phiên bản 1.24 lên 1.30.

POSIX không còn sử dụng Trình tải tự động nữa. Bất kỳ mã nào dựa vào việc triển khai này
chi tiết có lỗi và có thể thất bại do thay đổi này. Mã Perl của mô-đun có
được đơn giản hóa đáng kể, giảm gần một nửa số dòng mà không thay đổi về
chức năng. Mã XS đã được cấu trúc lại để giảm kích thước của phần chia sẻ
giảm khoảng 12% mà không có thay đổi nào về chức năng. Hiện có nhiều chức năng POSIX hơn
kiểm tra.

"sigsuspend" và "pause" hiện chạy trình xử lý tín hiệu trước khi quay lại, vì toàn bộ điểm
của hai chức năng này là đợi cho đến khi có tín hiệu đến rồi quay lại sau khi it
đã được kích hoạt. Các tín hiệu bị trì hoãn hoặc "an toàn" đã ngăn điều đó xảy ra,
có thể dẫn đến tình trạng chủng tộc [Perl #107216].

Thay vào đó, "POSIX::sleep" hiện là lệnh gọi trực tiếp vào chức năng "ngủ" của hệ điều hành cơ bản
trở thành một trình bao bọc Perl trên "CORE::sleep". "POSIX::dup2" hiện trả về giá trị đúng
trên Win32 (tức là, bộ mô tả tập tin). "POSIX::SigSet" "sigsuspend" và "sigpending"
và "POSIX::pause" hiện gửi tín hiệu an toàn ngay lập tức trước khi quay lại vị trí cũ
người gọi

"POSIX::Termios::setattr" hiện mặc định đối số thứ ba là "TCSANOW", thay vì 0.
Trên hầu hết các nền tảng, "TCSANOW" được xác định là 0, nhưng trên một số nền tảng, 0 không hợp lệ
tham số, khiến cuộc gọi có giá trị mặc định không thành công.

· Socket đã được nâng cấp từ phiên bản 1.94 lên 2.001.

Nó có các chức năng và hằng số mới để xử lý các ổ cắm IPv6:

pack_ipv6_mreq
giải nén_ipv6_mreq
IPV6_ADD_MEMBERSHIP
IPV6_DROP_MEMBERSHIP
IPV6_MTU
IPV6_MTU_DISCOVER
IPV6_MULTICAST_HOPS
IPV6_MULTICAST_IF
IPV6_MULTICAST_LOOP
IPV6_UNICAST_HOPS
CHỈ IPV6_V6

· Stocking đã được nâng cấp từ phiên bản 2.27 lên 2.34.

Nó không còn biến các giá trị vô hướng sao chép khi ghi thành các giá trị vô hướng chỉ đọc khi đóng băng và
rã đông.

· Sys :: Syslog đã được nâng cấp từ phiên bản 0.27 lên 0.29.

Bản nâng cấp này đóng nhiều lỗi còn tồn đọng.

· Thời hạn :: ANSIColor đã được nâng cấp từ phiên bản 3.00 lên 3.01.

Chỉ diễn giải tham chiếu mảng ban đầu dưới dạng danh sách màu chứ không phải bất kỳ tham chiếu ban đầu nào
tham chiếu, cho phép hàm màu hoạt động chính xác trên các đối tượng có
xác định chuỗi hóa.

· Thời hạn :: ReadLine đã được nâng cấp từ phiên bản 1.07 lên 1.09.

Term::ReadLine hiện hỗ trợ bất kỳ vòng lặp sự kiện nào, kể cả những vòng lặp sự kiện chưa được xuất bản và các vòng lặp đơn giản
IO::Select, lặp mà không cần phải viết lại mã hiện có cho bất kỳ mã cụ thể nào
khung [Perl #108470].

· Thread :: shared đã được nâng cấp từ phiên bản 1.37 lên 1.40.

Các hàm hủy trên các đối tượng dùng chung đôi khi bị bỏ qua nếu các đối tượng đó
chỉ được tham chiếu bởi các cấu trúc dữ liệu được chia sẻ. Điều này hầu như đã được khắc phục nhưng
hàm hủy vẫn có thể bị bỏ qua nếu đối tượng vẫn tồn tại tại thời điểm hủy diệt toàn cầu
[perl # 98204].

· Unicode :: Collate đã được nâng cấp từ phiên bản 0.73 lên 0.89.

Đã cập nhật lên CLDR 1.9.1

Các ngôn ngữ được cập nhật lên CLDR 2.0: mk, mt, nb, nn, ro, ru, sk, sr, sv, uk, zh__pinyin,
zh__đột quỵ

Các ngôn ngữ mới được hỗ trợ: bn, fa, ml, mr, or, pa, sa, si, si__dictionary, sr_Latn,
sv__reformed, ta, te, th, ur, wae.

Các chữ tượng hình tương thích được điều chỉnh cũng như các chữ tượng hình thống nhất cho các ngôn ngữ: ja,
ko, zh__big5han, zh__gb2312han, zh__bính âm, zh__đột quỵ.

Các tệp Locale/*.pl hiện được tìm kiếm trong @INC.

· Unicode :: Normalize đã được nâng cấp từ phiên bản 1.10 lên 1.14.

Các bản sửa lỗi để loại bỏ unicore/CompositionExclusions.txt từ cốt lõi.

· Unicode :: UCD đã được nâng cấp từ phiên bản 0.32 lên 0.43.

Điều này bổ sung thêm bốn hàm mới: "prop_aliases()" và "prop_value_aliases()", đó là
được sử dụng để tìm tất cả các từ đồng nghĩa được Unicode phê duyệt cho tên thuộc tính hoặc để chuyển đổi từ một
đặt tên cho người khác; "prop_invlist" trả về tất cả các điểm mã khớp với Unicode nhất định
tài sản nhị phân; và "prop_invmap" trả về thông số kỹ thuật đầy đủ của một
Thuộc tính Unicode.

· Win32API::File đã được nâng cấp từ phiên bản 0.1101 lên 0.1200.

Đã thêm các hàm SetStdHandle và GetStdHandle

Đã loại bỏ Modules Thực dụng
Như đã hứa trong ghi chú phát hành của Perl 5.14.0, các mô-đun sau đã bị xóa khỏi
phân phối cốt lõi và nếu cần nên được cài đặt từ CPAN thay thế.

· Devel::DProf đã bị loại bỏ khỏi lõi Perl. Phiên bản trước là 20110228.00.

· Shell đã bị loại bỏ khỏi lõi Perl. Phiên bản trước là 0.72_01.

· Một số thư viện kiểu Perl4 cũ không còn được dùng nữa trong phiên bản 5.14 hiện nay
LOẠI BỎ:

abbrev.pl khẳng định.pl bigfloat.pl bigint.pl bigrat.pl cacheout.pl
Complete.pl ctime.pl dotsh.pl ngoại lệ.pl fastcwd.plflush.pl
getcwd.pl getopt.pl getopts.pl tên máy chủ.pl importenv.pl
lib/find{,deep}.pl look.pl newgetopt.pl open2.pl open3.pl
pwd.pl shellwords.pl stat.pl tainted.pl termcap.pl timelocal.pl

Chúng có thể được tìm thấy trên CPAN dưới dạng Perl4::CoreLibs.

Tài liệu


Mới Tài liệu
dấu vết

perldtrace mô tả sự hỗ trợ DTrace của Perl, liệt kê các đầu dò được cung cấp và đưa ra các ví dụ
việc sử dụng của họ.

kinh nghiệm

Tài liệu này nhằm mục đích cung cấp danh sách các tính năng thử nghiệm trong Perl. Nó vẫn còn
công việc đang được tiến hành.

perlootut

Đây là một hướng dẫn OO mới. Nó tập trung vào các khái niệm OO cơ bản và sau đó khuyến nghị người đọc
chọn khung OO từ CPAN.

perlxstypemap

Sách hướng dẫn mới mô tả cơ chế sắp chữ XS một cách chi tiết chưa từng có và kết hợp
tài liệu mới với thông tin được trích xuất từ ​​Perlxs và tài liệu không chính thức trước đây
danh sách tất cả các sơ đồ kiểu lõi.

Những thay đổi đến Hiện tại Tài liệu
cá rô phi

· API HV từ lâu đã chấp nhận độ dài âm để cho thấy khóa ở dạng UTF8. Cái này
hiện đã được lập thành văn bản.

· Macro "boolSV()" hiện đã được ghi lại.

giác quan

· "dbmopen" xử lý chế độ 0 như một trường hợp đặc biệt, ngăn cản một tập tin không tồn tại khỏi
đang được tạo ra. Điều này đã xảy ra kể từ Perl 5.000, nhưng chưa bao giờ được ghi lại
bất cứ nơi nào. Bây giờ mục perlfunc đề cập đến nó [Perl #90064].

· Như một tai nạn của lịch sử, "open $fh, '<:', ..." áp dụng các lớp mặc định cho
platform (":raw" trên Unix, ":crlf" trên Windows), bỏ qua mọi thứ được khai báo bởi
open.pm. Đây có vẻ là một tính năng hữu ích và đã được ghi lại trong perlfunc và
mở.

· Mục "tách" đã được viết lại. Bây giờ nó rõ ràng hơn nhiều so với trước đây.

cá rô phi

· Một phần mới, Tự động tải với XSUB, đã được thêm vào, giải thích hai API cho
truy cập tên của phụ được tải tự động.

· Một số mô tả chức năng trong perlguts gây nhầm lẫn vì không rõ liệu
họ đề cập đến chức năng ở trên hoặc dưới mô tả. Điều này đã được làm rõ
[perl # 91790].

perlobj

· Tài liệu này đã được viết lại từ đầu và bao gồm các khái niệm OO khác nhau
đã được mở rộng.

trượt ngã

· Tài liệu của toán tử smartmatch đã được làm lại và chuyển từ Perlsyn sang
perlop nơi nó thuộc về.

Nó cũng đã được sửa cho trường hợp "undef" ở phía bên trái. Danh sách của
các hành vi khớp thông minh khác nhau đã đặt một vật phẩm ở sai vị trí.

· Tài liệu về câu lệnh dấu chấm lửng ("...") đã được làm lại và chuyển từ
perlop sang perlsyn.

· Giải thích về các toán tử bitwise đã được mở rộng để giải thích cách chúng hoạt động trên
Chuỗi Unicode (5.14.1).

· Nhiều ví dụ khác cho "m//g" đã được thêm vào (5.14.1).

· Cú pháp tài liệu tại đây "<<\FOO" đã được ghi lại (5.14.1).

sự thực dụng

· Hiện đã có quy ước chuẩn cho việc đặt tên các khóa trong "%^H", được ghi lại trong Key
đặt tên.

"Rửa tiền Phát hiện Nhiễm độc Dữ liệu" in perlsec

· Ví dụ về chức năng kiểm tra sự nhiễm độc có một lỗi nhỏ. $@ nhu cầu
được bản địa hóa để ngăn chặn việc nó thay đổi giá trị toàn cầu này bên ngoài hàm. Các
phương pháp ưa thích để kiểm tra xem điều này có còn "bị nhiễm độc" trong Scalar::Util.

perllol

· Perllol đã được mở rộng với các ví dụ sử dụng cú pháp "push $ vô hướng" mới được giới thiệu
trong Perl 5.14.0 (5.14.1).

perlmod

· Perlmod giờ đây tuyên bố rõ ràng rằng một số kiểu thao tác trên bảng ký hiệu rõ ràng
không được hỗ trợ. Điều này hệ thống hóa những gì thực sự đã xảy ra [Perl #78074].

perlpodstyle

· Các mẹo sử dụng mã định dạng đã được sửa chữa và mở rộng đáng kể.

· Hiện tại có một vài ví dụ về việc xem trước các tệp POD sau khi chúng có
đã được chỉnh sửa.

xin lỗi

· Lệnh "(*COMMIT)" hiện được liệt kê ở phần bên phải (Động từ không có
lý lẽ).

chạy loạn xạ

· Perlrun đã trải qua một cuộc thanh lọc đáng kể. Đáng chú ý nhất, -0x ... hình thức của -0
cờ đã được làm rõ và phần cuối cùng về các biến môi trường đã được
đã sửa và mở rộng (5.14.1).

perlsub

· Cú pháp nguyên mẫu ($;) đã tồn tại khá lâu, hiện đã được ghi lại
trong perlsub. Nó cho phép một hàm một ngôi có cùng mức độ ưu tiên như toán tử danh sách.

nước hoa

· Cú pháp yêu cầu để buộc dây đã được ghi lại.

nước hoa

· Tài liệu về $! đã được sửa chữa và làm rõ. Nó từng tuyên bố rằng $!
có thể là "undef", điều này không đúng. Cũng không rõ liệu các cuộc gọi hệ thống có được thiết lập hay không
"errno" của C hoặc $ của Perl! [Perl #91614].

· Tài liệu về $$ đã được sửa đổi với các cảnh báo bổ sung về việc thay đổi
xử lý ID.

Nền tảng khác Những thay đổi

· Perlxs đã được mở rộng với tài liệu về bản đồ đánh chữ nội tuyến.

· Perlref có phần Tham khảo Thông tư mới giải thích cách thức các thông tư có thể không được thực hiện
giải phóng và cách giải quyết vấn đề đó với các tham chiếu yếu.

· Các phần của perlapi đã được làm rõ và các giá trị tương đương trong Perl của một số hàm C đã được làm rõ
được thêm vào như một phương thức trình bày bổ sung.

· Làm rõ một số phần của perlre và perlrecharclass.

Đã loại bỏ Tài liệu
Xưa OO Tài liệu

Các hướng dẫn OO cũ, perltoot, perltooc và perlboot, đã bị xóa. Perlbot
(túi thủ thuật đối tượng) cũng đã bị xóa.

Phát triển Đồng bằng

Các tệp perldelta dành cho bản phát hành phát triển không còn được đóng gói bằng Perl nữa. Những cái này có thể
vẫn được tìm thấy trong kho mã nguồn Perl.

Chẩn đoán


Các bổ sung hoặc thay đổi sau đây đã được thực hiện đối với đầu ra chẩn đoán, bao gồm cả cảnh báo
và các thông báo lỗi nghiêm trọng. Để có danh sách đầy đủ các thông báo chẩn đoán, hãy xem perldiag.

Mới Chẩn đoán
Mới lỗi

· Không thể đặt @DB::args bị ràng buộc

Lỗi này xảy ra khi "người gọi" cố gắng đặt @DB::args nhưng thấy nó bị ràng buộc. Trước chuyện này
lỗi đã được thêm vào, thay vào đó nó đã bị lỗi.

· Không thể liên kết mảng không thể xác định được

Lỗi này là một phần của quá trình kiểm tra an toàn mà người vận hành "buộc" thực hiện trước khi buộc một sợi dây.
mảng đặc biệt như @_. Bạn sẽ không bao giờ nhìn thấy tin nhắn này.

· &CORE::%s không thể gọi trực tiếp

Điều này xảy ra khi một chương trình con trong không gian tên "CORE::" được gọi với cú pháp &foo hoặc
thông qua một tài liệu tham khảo. Một số chương trình con trong gói này chưa thể được gọi theo cách đó,
nhưng phải được gọi là barewords. Xem "Các chương trình con trong không gian tên" CORE "", ở trên.

· Bộ lọc nguồn chỉ áp dụng cho luồng byte

Lỗi mới này xảy ra khi bạn cố gắng kích hoạt bộ lọc nguồn (thường bằng cách tải một
mô-đun bộ lọc nguồn) trong chuỗi được chuyển tới "eval" trong "unicode_eval"
tính năng này.

Mới Cảnh báo

· được xác định(@array) không còn được dùng nữa

"Đã xác định (@array)" không được dùng nữa hiện cũng cảnh báo về các biến gói.
Trước đây nó chỉ đưa ra cảnh báo cho các biến từ vựng.

· chiều dài() được sử dụng trên %s

Cảnh báo mới này xảy ra khi "độ dài" được sử dụng trên một mảng hoặc hàm băm, thay vì
"vô hướng(@array)" hoặc "vô hướng(khóa %hash)".

· Thuộc tính giá trị %s đã được xác định sẵn chương trình con

attribut.pm hiện phát ra cảnh báo này khi thuộc tính :lvalue được áp dụng cho Perl
chương trình con đã được xác định, vì làm như vậy có thể có những tác dụng phụ không mong muốn
hiệu ứng.

· đối số quá tải '%s' không hợp lệ

Cảnh báo này, trong danh mục "quá tải", được tạo ra khi pragma quá tải
đưa ra một đối số mà nó không nhận ra, có lẽ là một toán tử gõ sai.

· $[ được sử dụng trong %s (ý bạn là $] ?)

Cảnh báo mới này tồn tại để phát hiện việc sử dụng sai $[ trong quá trình kiểm tra phiên bản. $], không
$[, chứa số phiên bản.

· Sự phân công vô ích cho một việc tạm thời

Việc gán cho một đại lượng vô hướng tạm thời được trả về từ một chương trình con lvalue hiện tạo ra điều này
cảnh báo [Perl #31946].

· Sử dụng \E một cách vô ích

"\E" không làm gì trừ khi có "\Q", "\L" hoặc "\U" đứng trước.

Đã loại bỏ lỗi
· "sắp xếp bây giờ là một từ dành riêng"

Lỗi này thường xảy ra khi gọi "sắp xếp" mà không có đối số, theo sau là ";" hoặc
")". (Ví dụ: "sort;" sẽ chết nhưng "{sort}" vẫn ổn.) Thông báo lỗi này đã được thêm vào
Perl 3 để bắt mã như "đóng (sắp xếp)" sẽ không còn hoạt động. Hơn hai
nhiều thập kỷ sau, thông điệp này không còn phù hợp nữa. Bây giờ "sắp xếp" không có đối số là
luôn được phép và trả về một danh sách trống, giống như trong những trường hợp nó được
đã được cho phép [Perl #90030].

Những thay đổi đến Hiện tại Chẩn đoán
· "Áp dụng mẫu khớp..." hoặc cảnh báo tương tự được tạo ra khi một mảng hoặc hàm băm bị hủy
ở phía bên trái của toán tử "=~" hiện đề cập đến tên của biến.

· "Cố gắng giải phóng chuỗi chia sẻ không tồn tại" có cách viết là "không tồn tại
tồn tại" được sửa thành "không tồn tại". Nó đã được liệt kê đúng chính tả
trong perldiag.

· Các thông báo lỗi khi sử dụng "mặc định" và "khi" bên ngoài bộ tạo chuyên đề đã được khắc phục
được tiêu chuẩn hóa để khớp với các thông báo cho điều khiển "tiếp tục" và vòng lặp. Bây giờ họ đọc
'Không thể "mặc định" bên ngoài máy bôi ngoài da' và 'Không thể "khi" bên ngoài máy bôi ngoài da'.
Cả hai đều từng 'Không thể sử dụng khi nào() bên ngoài thuốc bôi' [Perl #91514].

· Thông báo "Điểm mã 0x%X không phải là Unicode, không có thuộc tính nào khớp với nó; tất cả đều nghịch đảo
Properties do" đã được đổi thành "Điểm mã 0x%X không phải là Unicode, tất cả \p{} đều khớp
thất bại; tất cả các trận đấu \P{} đều thành công".

· Xác định lại cảnh báo cho các chương trình con liên tục từng là bắt buộc, thậm chí xảy ra
dưới "không có cảnh báo". Bây giờ họ tôn trọng những lời cảnh báo pragma.

· Thông báo cảnh báo "toàn cầu bị lỗi" hiện có thể bị chặn thông qua "không có cảnh báo" [perl
# 111656].

· Thông báo lỗi định dạng phiên bản không hợp lệ hiện cho biết "số phiên bản phủ định" trong
dấu ngoặc đơn, thay vì "dữ liệu không phải số" cho số âm.

· Hai cảnh báo Có thể cố gắng đưa nhận xét vào qw () danh sách và nỗ lực có thể để
các từ riêng biệt bằng dấu phẩy không còn loại trừ lẫn nhau: cùng một cấu trúc "qw"
có thể sản xuất cả hai.

· Cảnh báo chưa được khởi tạo cho "y///r" khi $_ ẩn và không xác định hiện đề cập đến
tên biến, giống như biến thể không phải/r của toán tử.

· Cảnh báo 'Sử dụng "foo" không có dấu ngoặc đơn là mơ hồ" đã được mở rộng để áp dụng
cũng như các chương trình con do người dùng xác định với nguyên mẫu (;$) chứ không chỉ với các chương trình con được cài sẵn
chức năng.

· Cảnh báo đề cập đến tên các biến từ vựng ("của tôi") có ký tự Unicode trong
giờ đây họ tôn trọng sự hiện diện hay vắng mặt của lớp ":utf8" trên bộ điều khiển đầu ra,
thay vì xuất ra UTF8 bất kể. Ngoài ra, tên chính xác được bao gồm trong
các chuỗi được chuyển tới trình xử lý $SIG{__WARN__}, thay vì các byte UTF8 thô.

Tiện ích Những thay đổi


h2ph

· h2ph dùng để tạo mã có dạng

trừ khi(được xác định(&FOO)) {
phụ FOO() {42;}
}

Nhưng chương trình con là một khai báo tại thời điểm biên dịch và do đó không bị ảnh hưởng bởi
tình trạng. Bây giờ nó đã được sửa để phát ra chuỗi "eval" xung quanh chương trình con
[perl # 99368].

bắn tung tóe

· bắn tung tóe không còn phát ra dấu vết ngược với số dòng đầu tiên được lặp lại.

Điều này:

Ngoại lệ chưa được phát hiện từ mã người dùng:
Không thể giải quyết vấn đề ở -e dòng 1.
tại -e dòng 1
main::baz() được gọi tại -e dòng 1
main::bar() được gọi tại -e dòng 1
main::foo() được gọi tại -e dòng 1

đã trở thành thế này:

Ngoại lệ chưa được phát hiện từ mã người dùng:
Không thể giải quyết vấn đề ở -e dòng 1.
main::baz() được gọi tại -e dòng 1
main::bar() được gọi tại -e dòng 1
main::foo() được gọi tại -e dòng 1

· Một số thông báo lỗi bao gồm nhiều dòng được liệt kê dưới dạng các mục riêng biệt trong
perldiag. splain đã được dạy để tìm các mục riêng biệt trong những trường hợp này, thay vào đó
chỉ đơn giản là không tìm thấy tin nhắn.

chi tiết zip

· Đây là một tiện ích mới, được đưa vào như một phần của bản nâng cấp IO::Compress::Base.

zipdetails hiển thị thông tin về cấu trúc bản ghi bên trong của tệp zip.
Nó không quan tâm đến việc hiển thị bất kỳ chi tiết nào của dữ liệu nén được lưu trữ trong
file zip.

Cấu hình Compilation


· regrec.h đã được sửa đổi để tương thích với GCC - Lỗi tùy chọn, như được sử dụng bởi
một số dự án bao gồm các tệp tiêu đề của Perl (5.14.1).

· "USE_LOCALE{,_COLLATE,_CTYPE,_NUMERIC}" đã được thêm vào đầu ra của Perl -V khi chúng
đã ảnh hưởng đến hoạt động của trình thông dịch nhị phân (mặc dù chỉ trong một phạm vi nhỏ).

· Mã và các bài kiểm tra cho IPC::Open2 đã được chuyển từ máy lẻ/IPC-Open2 trong
máy lẻ/IPC-Open3, vì "IPC::Open2::open2()" được triển khai dưới dạng một lớp bao bọc mỏng xung quanh
"IPC::Open3::_open3()" và do đó được liên kết rất chặt chẽ với nó.

· Các loại phép thuật và vtable ma thuật hiện được tạo từ dữ liệu trong một tập lệnh mới
regen/mg_vtable.pl, thay vì được bảo trì bằng tay. Như các biến thể EBCDIC khác nhau
không thể đồng ý về điểm mã cho '~', việc chuyển đổi ký tự thành điểm mã đã hoàn tất
tại thời điểm xây dựng bởi tạo_uudmap đến một tiêu đề mới được tạo mg_data.h. "PL_vtbl_bm"
và "PL_vtbl_fm" hiện được bộ xử lý trước xác định là "PL_vtbl_regexp", thay vì
là các biến C riêng biệt. "PL_vtbl_sig" đã bị xóa.

· Tòa nhà có "-DPERL_GLOBAL_STRUCT" hoạt động trở lại. Cấu hình này thường không
đã sử dụng.

· Perl được cấu hình với MAD hiện giải phóng chính xác các cấu trúc "MADPROP" khi OP được giải phóng.
"MADPROP" hiện được phân bổ bằng "PerlMemShared_malloc()"

· makedef.pl đã được tái cấu trúc. Điều này sẽ không có ảnh hưởng đáng chú ý đến bất kỳ
các nền tảng sử dụng nó như một phần của bản dựng của họ (AIX, VMS, Win32).

· "useperlio" không thể bị vô hiệu hóa được nữa.

· Tập tin toàn cầu.sym không còn cần thiết nữa và đã bị loại bỏ. Nó chứa một danh sách
tất cả các hàm đã xuất, một trong các tệp được tạo bởi regen/embed.pl từ dữ liệu trong
nhúng.fncregen/opcode. Mã đã được cấu trúc lại để người dùng duy nhất của
toàn cầu.sym, makedef.pl, bây giờ đọc nhúng.fncregen/opcode trực tiếp, loại bỏ
cần lưu trữ danh sách các hàm đã xuất trong một tệp trung gian.

As toàn cầu.sym chưa bao giờ được cài đặt, thay đổi này sẽ không hiển thị bên ngoài bản dựng
quá trình.

· pod/buildtoc, được quá trình xây dựng sử dụng để xây dựng perltoc, đã được tái cấu trúc và
giản thể. Bây giờ nó chỉ chứa mã để xây dựng perltoc; mã để tái tạo
Makefiles đã được chuyển đến Đang chuyển/pod_rules.pl. Đó là một lỗi nếu thay đổi này có bất kỳ
ảnh hưởng vật chất đến quá trình xây dựng.

· nhóm/roffitall hiện được xây dựng bởi pod/buildtoc, thay vì được vận chuyển cùng với
phân bổ. Danh sách các trang hướng dẫn của nó hiện đã được tạo (và do đó hiện tại). Nhìn thấy
cũng RT #103202 để biết vấn đề liên quan chưa được giải quyết.

· Trang man cho "XS::Typemap" không còn được cài đặt. "XS::Typemap" là mô-đun thử nghiệm
chưa được cài đặt, do đó việc cài đặt tài liệu của nó không có ý nghĩa gì.

· Các tùy chọn -Dusesitecustomize và -Duserelocatableinc hiện hoạt động bình thường cùng nhau.

Nền tảng HỖ TRỢ


Nền tảng cụ thể Chú ý
Cygwin

· Kể từ phiên bản 1.7, Cygwin hỗ trợ các đường dẫn UTF-8 nguyên gốc. Nếu Perl được xây dựng theo đó
môi trường, thư mục và tên tệp sẽ được mã hóa UTF-8.

· Cygwin không khởi tạo tất cả các biến môi trường Win32 gốc. Nhìn thấy
README.cygwin để thảo luận về chức năng "Cygwin::sync_winenv()" mới được thêm vào
[Perl #110190] và để biết thêm các liên kết.

HP-UX

· HP-UX PA-RISC/64 hiện hỗ trợ gcc-4.x

Bản sửa lỗi để sửa kích thước ổ cắm hiện làm cho bộ thử nghiệm vượt qua HP-UX PA-RISC cho
Bản dựng 64bitall. (5.14.2)

VMS

· Loại bỏ các phần bao gồm không cần thiết, sửa các cảnh báo của trình biên dịch linh tinh và đóng một số phần
bình luận chưa được tiết lộ về vms/vms.c.

· Loại bỏ lớp sockadapt khỏi bản dựng VMS.

· Hỗ trợ rõ ràng cho các phiên bản VMS trước v7.0 và phiên bản DEC C trước v6.0 đã có
loại bỏ.

· Kể từ Perl 5.10.1, trình bao bọc "stat" cây nhà lá vườn đã không thể phân biệt được
giữa tên thư mục chứa dấu gạch dưới và tên tệp giống hệt nhau
chứa một dấu chấm ở cùng một vị trí (ví dụ: t/test_pl dưới dạng thư mục và t/test.pl dưới dạng
một tập tin). Vấn đề này đã được sửa chữa.

· Việc xây dựng trên VMS giờ đây cho phép đặt tên các ký hiệu kết quả trong mã C cho Perl lâu hơn
hơn 31 ký tự. Ký hiệu như
"Perl__it_was_the_best_of_times_it_was_the_worst_of_times" hiện có thể được tạo tự do
mà không làm cho trình liên kết VMS bị treo.

GNU / Hurd

· Nhiều lỗi xây dựng và thử nghiệm trên GNU/Hurd đã được giải quyết bằng các gợi ý dành cho
xây dựng các mô-đun DBM, phát hiện đường dẫn tìm kiếm thư viện và kích hoạt tệp lớn
hỗ trợ.

mởVOS

· Perl hiện được xây dựng với liên kết động trên OpenVOS, phiên bản được hỗ trợ tối thiểu của
hiện là Bản phát hành 17.1.0.

SunOS

Trình biên dịch C++ của CC workshop hiện đã được phát hiện và sử dụng trên các hệ thống không có cc.

nội Những thay đổi


· Việc trình bày các định dạng được biên dịch hiện được lưu trữ thông qua "mg_ptr" của chúng
"PERL_MAGIC_fm". Trước đây nó được lưu trữ trong bộ đệm chuỗi, ngoài "SvLEN()",
đầu cuối đều đặn của chuỗi. "SvCOMPILED()" và "SvCOMPILED_{on,off}()" hiện đã tồn tại
chỉ để tương thích với mã XS. Cái đầu tiên luôn là 0, hai cái còn lại bây giờ không-
ôi. (5.14.1)

· Một số biến toàn cục được đánh dấu là "const", thành viên trong cấu trúc trình thông dịch
đã được sắp xếp lại và các opcode đã được sắp xếp lại. Op "OP_AELEMFAST" có
được chia thành "OP_AELEMFAST" và "OP_AELEMFAST_LEX".

· Khi làm trống một hàm băm của các phần tử của nó (ví dụ: thông qua undef(%h), hoặc %h=()), trường HvARRAY là
không còn tạm thời bằng 0 nữa. Bất kỳ hàm hủy nào được gọi trên các phần tử được giải phóng đều thấy
các phần tử còn lại. Do đó, %h=() trở nên giống như "xóa $h{$_} cho các khóa %h".

· Các đại lượng vô hướng được biên soạn bởi Boyer-Moore hiện là PVMG và các bảng Boyer-Moore hiện được lưu trữ
thông qua mg_ptr của "PERL_MAGIC_bm" của họ. Trước đây họ là PVGV, với các bàn
được lưu trữ trong bộ đệm chuỗi, ngoài "SvLEN()". Điều này giúp loại bỏ vị trí cuối cùng nơi
lõi lưu trữ dữ liệu ngoài "SvLEN()".

· Logic đơn giản hóa trong "Perl_sv_magic()" đưa ra một thay đổi nhỏ về hành vi đối với lỗi
trường hợp liên quan đến các loại phép thuật chưa biết. Trước đây, nếu "Perl_sv_magic()" được thông qua
loại ma thuật mà nó chưa biết, nó sẽ

1. Lỗi "Đã thử sửa đổi giá trị chỉ đọc" nếu chỉ đọc

2. Trả lại không có lỗi nếu SV tình cờ đã có phép thuật này

3. ngược lại thì kêu "Không biết xử lý phép thuật kiểu \\%o"

Bây giờ nó sẽ luôn kêu "Không biết cách xử lý phép thuật loại \\%o", ngay cả khi đọc-
chỉ các giá trị hoặc SV đã có loại ma thuật không xác định.

· Chức năng "fetch_cop_label" thử nghiệm đã được đổi tên thành "cop_fetch_label".

· Chức năng "cop_store_label" đã được thêm vào API nhưng chỉ mang tính thử nghiệm.

· embedvar.h đã được đơn giản hóa và một mức định hướng vĩ mô cho các biến PL_*
đã bị xóa đối với cấu hình mặc định (không bội số). Macro PERLVAR*()
bây giờ trực tiếp mở rộng đối số của họ sang các mã thông báo, chẳng hạn như "PL_defgv", thay vì mở rộng
thành "PL_Idefgv", với embedvar.h xác định macro để ánh xạ "PL_Idefgv" thành "PL_defgv". XS
mã có sự không chính đáng trong quá trình triển khai có thể cần được cập nhật.

· Một API đã được thêm vào để chọn rõ ràng có xuất ký hiệu XSUB hay không. Hơn
chi tiết có thể được tìm thấy trong các nhận xét cho cam kết e64345f8.

· Chức năng "is_gv_magical_sv" đã bị loại bỏ và hợp nhất với
"gv_fetchpvn_flags". Nó từng được gọi để xác định xem có nên sử dụng GV hay không
được tự động hóa trong bối cảnh giá trị. Bây giờ nó đã được thay thế bằng cờ "GV_ADDMG" mới
(không phải là một phần của API).

· Điểm mã được trả về từ hàm "utf8n_to_uvuni()" khi đầu vào là
UTF-8 không đúng định dạng, cho phép các dị tật và cảnh báo "utf8" hiện đã bị tắt
KÝ TỰ THAY THẾ Unicode bất cứ khi nào có sai sót đến mức không thể xác định rõ
điểm mã có thể được tính toán. Trước đây giá trị trả về về cơ bản là rác.
Các dị tật duy nhất có giá trị được xác định rõ ràng là một chuỗi có độ dài bằng 0 (XNUMX là
sự trở lại) và các chuỗi UTF-8 quá dài.

· Danh sách đệm hiện được đánh dấu "AvREAL"; tức là tính tham chiếu. Họ đã luôn luôn
được tính tham chiếu, nhưng không được đánh dấu là thực, bởi vì pad.c đã tự dọn dẹp,
thay vì sử dụng mã dọn dẹp thông thường trong sv.c. Điều đó gây ra vấn đề trong chủ đề
nhân bản, vì vậy bây giờ cờ "AvREAL" đang bật nhưng bị tắt trong pad.c ngay trước
danh sách đệm được giải phóng (sau pad.c đã thực hiện việc giải phóng các miếng đệm tùy chỉnh).

· Tất cả các tập tin C tạo nên lõi Perl đã được chuyển đổi sang UTF-8.

· Các chức năng mới này đã được thêm vào như một phần của công việc về ký hiệu Unicode:

HvNAMELEN
HvNAMEUTF8
HvENAMELEN
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
mớiGVgen_flags
sv_xuất_từ_pv
sv_derive_from_pvn
sv_xuất_từ_sv
sv_does_pv
sv_does_pvn
sv_does_sv
whichsig_pv
whichsig_pvn
whichsig_sv
mớiCONSTSUB_flag

Các hàm gv_fetchmethod_*_flags, như gv_fetchmethod_flags, đều mang tính thử nghiệm và
có thể thay đổi trong phiên bản tương lai.

· Các chức năng sau đã được thêm vào. đó là không một phần của API:

GvNAMEUTF8
GvENAMELEN
GvENAME_HEK
Cảnh sátSTASH_flags
Cảnh sátSTASH_flags_set
PmopSTASH_flags
PmopSTASH_flags_set
sv_sethek
HEKfARG

Ngoài ra còn có macro "HEKf" tương ứng với "SVf", để nội suy HEK trong
chuỗi được định dạng.

· "sv_catpvn_flags" có một vài cờ mới chỉ dành cho nội bộ, "SV_CATBYTES" và
"SV_CATUTF8", cho biết mảng char được nối có phải là UTF8 hay không. Cái này
cho phép ghép nối hiệu quả hơn việc tạo các SV tạm thời để chuyển tới
"sv_catsv".

· Đối với XS AUTOLOAD subs, $AUTOLOAD được thiết lập một lần nữa, giống như trong 5.6.0. Đây là trong
ngoài cài đặt "SvPVX(cv)", để tương thích với 5.8 đến 5.14. Xem phần "Tự động tải
với XSUB" trong perlguts.

· Bây giờ Perl kiểm tra xem mảng (isa được tuyến tính hóa) được plugin MRO trả về có bắt đầu hay không
với tên của chính lớp mà mảng được tạo, thay vì
giả sử là có. Điều này ngăn phần tử đầu tiên bị bỏ qua trong quá trình
tra cứu phương pháp. Điều đó cũng có nghĩa là "mro::get_Tuyến_isa" có thể trả về một mảng có một
nhiều yếu tố hơn plugin MRO được cung cấp [Perl #94306].

· "PL_curstash" hiện được tính tham chiếu.

· Hiện có các gợi ý về gói tính năng trong "PL_hints" ($^H) mà các khai báo phiên bản sử dụng,
để tránh phải tải tính năng.pm. Một cài đặt của các bit gợi ý biểu thị "tùy chỉnh"
gói tính năng, có nghĩa là các mục trong "%^H" vẫn được áp dụng. tính năng.pm sử dụng
cái đó.

Macro "HINT_FEATURE_MASK" được xác định trong perl.h cùng với những gợi ý khác. Khác
các macro để cài đặt và thử nghiệm các tính năng cũng như gói có trong phiên bản mới tính năng.h.
"FEATURE_IS_ENABLED" (đã chuyển sang tính năng.h) không còn được sử dụng trong suốt
cơ sở mã, nhưng các macro cụ thể hơn, ví dụ: "FEATURE_SAY_IS_ENABLED", được xác định
in tính năng.h.

· lib/feature.pm bây giờ là một tệp được tạo, được tạo bởi cái mới regen/feature.pl kịch bản,
điều này cũng tạo ra tính năng.h.

· Mảng ràng buộc bây giờ luôn là "AvREAL". Nếu @_ hoặc "DB::args" bị ràng buộc thì nó được hợp nhất
đầu tiên, để đảm bảo điều này luôn luôn như vậy.

· Hai chức năng mới "utf8_to_uvchr_buf()" và "utf8_to_uvuni_buf()" đã được thêm vào.
Chúng giống như "utf8_to_uvchr" và "utf8_to_uvuni" (hiện không được dùng nữa),
nhưng lấy một tham số bổ sung được sử dụng để bảo vệ chống lại việc đọc quá cuối
chuỗi đầu vào. Xem "utf8_to_uvchr_buf" trong perlapi và "utf8_to_uvuni_buf" trong
perlapi.

· Công cụ biểu thức chính quy hiện thực hiện các kết quả khớp không phân biệt chữ hoa chữ thường TRIE trong Unicode.
Điều này có thể thay đổi đầu ra của "use re 'debug';" và sẽ tăng tốc nhiều thứ khác nhau.

· Có chức năng "wrap_op_checker()" mới, cung cấp giải pháp thay thế an toàn theo luồng
để viết trực tiếp tới "PL_check".

Chọn Bug Sửa chữa


Mảng băm
· Một lỗi đã được sửa có thể gây ra lỗi "Sử dụng giá trị giải phóng khi lặp lại" nếu
hai phần tử băm tiếp theo sẽ được lặp lại sẽ bị xóa [Perl #85026]. (5.14.1)

· Xóa trình lặp băm hiện tại (phần tử băm sẽ được trả về bởi
lệnh gọi tiếp theo tới "mỗi") trong ngữ cảnh trống được sử dụng để giải phóng nó [Perl #85026].

· Xóa các phương thức thông qua cú pháp "delete $Class::{method}" được sử dụng để cập nhật bộ đệm phương thức
nếu được gọi trong ngữ cảnh trống, nhưng không phải ngữ cảnh vô hướng hoặc danh sách.

· Khi các phần tử băm bị xóa trong ngữ cảnh trống, mục băm nội bộ hiện được giải phóng
trước khi giá trị được giải phóng, để ngăn chặn các hàm hủy được gọi bởi giá trị sau đó giải phóng khỏi
nhìn thấy hàm băm ở trạng thái không nhất quán. Có thể gây ra sự giải phóng kép nếu
hàm hủy đã giải phóng chính hàm băm [Perl #100340].

· Tối ưu hóa "khóa" trong Perl 5.12.0 để làm cho nó nhanh hơn đối với các hàm băm trống gây ra "mỗi"
không thiết lập lại trình vòng lặp nếu được gọi sau khi phần tử cuối cùng bị xóa.

· Giải phóng các hàm băm lồng sâu không còn gặp sự cố [Perl #44225].

· Mã XS có thể tạo các giá trị băm với các phần tử không có giá trị. Các
các toán tử phần tử băm và lát cắt được sử dụng để gặp sự cố khi xử lý chúng trong ngữ cảnh giá trị.
Hiện tại, họ tạo ra thông báo lỗi "Đã thử sửa đổi giá trị băm không thể tạo".

· Nếu việc gán danh sách cho một hàm băm hoặc mảng sẽ kích hoạt các hàm hủy để giải phóng hàm băm hoặc
mảng chính nó, một sự cố sẽ xảy ra sau đó. Đây không còn là trường hợp nữa [Perl #107440].

· Trước đây, có thể giải phóng kiểu chữ của một mảng hoặc hàm băm cục bộ (ví dụ: "local
@{"x"}; delete $::{x}"), dẫn đến sự cố khi thoát phạm vi.

· Một số lỗi cốt lõi ảnh hưởng đến Hash::Util đã được sửa: khóa phần tử băm là
bản sao toàn cầu không còn khiến nhiệm vụ tiếp theo làm hỏng toàn cầu (5.14.2) và
việc mở khóa phần tử băm chứa vô hướng sao chép khi ghi không còn gây ra
sửa đổi đại lượng vô hướng đó để sửa đổi các đại lượng vô hướng khác đang chia sẻ cùng một chuỗi
đệm.

C API nhất định
· Chức năng XS "newHVhv" hiện hoạt động trên các giá trị băm bị ràng buộc, thay vì gặp sự cố hoặc quay trở lại
một hàm băm trống.

· Macro C "SvIsCOW" bây giờ trả về sai cho các bản sao chỉ đọc của các kiểu chữ, chẳng hạn như
những cái được tạo bởi:

$hash{elem} = *foo;
Hash::Util::lock_value %hash, 'elem';

Nó được sử dụng để trả về đúng.

· Hàm C "SvPVutf8" không còn cố gắng sửa đổi đối số của nó nữa, dẫn đến lỗi
[perl # 108994].

· "SvPVutf8" hiện hoạt động bình thường với các biến ma thuật.

· "SvPVbyte" hiện hoạt động bình thường đối với các ứng dụng không phải PV.

· Khi xuất hiện với đầu vào UTF-8 không đúng định dạng, các hàm có thể gọi XS
"is_utf8_string()", "is_utf8_string_loc()" và "is_utf8_string_loclen()" có thể đọc
vượt quá phần cuối của chuỗi đầu vào tối đa 12 byte. Điều này không còn xảy ra nữa. [ngọc
#32080]. Tuy nhiên hiện tại "is_utf8_char()" vẫn còn lỗi này, xem
"is_utf8_char()" bên trên.

· Chức năng "pregcomp" cấp độ C có thể bị nhầm lẫn về việc liệu mẫu có ở
UTF8 nếu mẫu là một vô hướng quá tải, bị ràng buộc hoặc ma thuật [Perl
# 101940].

Thời gian biên dịch gợi ý
· Việc buộc "%^H" không còn khiến Perl bị sập hoặc bỏ qua nội dung của "%^H" khi
nhập phạm vi biên dịch [Perl #106282].

· "eval $string" và "require" được sử dụng không để bản địa hóa "%^H" trong quá trình biên dịch nếu có
trống tại thời điểm lệnh gọi "eval" được biên dịch. Điều này có thể dẫn đến khía cạnh đáng sợ
các hiệu ứng, như "use re "/m"" bật các cờ khác mà mã xung quanh đang thử
để kích hoạt cho người gọi nó [Perl #68750].

· "eval $string" và "require" không còn bản địa hóa các gợi ý ($^H và "%^H") trong thời gian chạy, nhưng
chỉ trong quá trình biên dịch chuỗi $ hoặc tệp được yêu cầu. Điều này làm cho "BEGIN {
$^H{foo}=7 }" tương đương với "BEGIN { eval '$^H{foo}=7' }" [perl #70151].

· Việc tạo khối BEGIN từ mã XS (thông qua "newXS" hoặc "newATTRSUB") sẽ
hoàn thành, hãy biến các gợi ý của mã biên dịch hiện tại thành gợi ý hiện tại. Cái này
có thể gây ra cảnh báo xảy ra trong phạm vi không cảnh báo.

Sao chép trên ghi vô hướng
Các hàm vô hướng khóa băm sao chép khi ghi hoặc chia sẻ đã được giới thiệu trong phiên bản 5.8.0, nhưng hầu hết mã Perl đều có
không gặp phải chúng (chúng được sử dụng chủ yếu trong nội bộ). Perl 5.10.0 đã mở rộng chúng, chẳng hạn như
việc gán "__PACKAGE__" hoặc khóa băm cho đại lượng vô hướng sẽ khiến nó được sao chép khi ghi.
Một số phần của Perl chưa được cập nhật để giải quyết chúng nhưng hiện đã được sửa.

· "Utf8 :: decode" có một lỗi khó chịu có thể sửa đổi bộ đệm chuỗi ký tự vô hướng sao chép-ghi-ghi
tại chỗ (tức là bỏ qua bản sao). Điều này có thể dẫn đến việc băm có hai phần tử
với cùng một khóa [Perl #91834]. (5.14.2)

· Các chương trình con Lvalue không cho phép trả về các giá trị vô hướng COW. Điều này đã được sửa cho
bối cảnh vô hướng lvalue trong Perl 5.12.3 và 5.14.0, nhưng bối cảnh danh sách chưa được sửa cho đến khi
bản phát hành này.

· Các phần tử của hàm băm bị hạn chế (xem các trường pragma) chứa các giá trị sao chép-ghi
không thể xóa được và các giá trị băm như vậy cũng không thể xóa được ("%hash = ()"). (5.14.2)

· Bản địa hóa một biến bị ràng buộc được sử dụng để làm cho biến đó ở chế độ chỉ đọc nếu nó chứa bản sao khi ghi
sợi dây. (5.14.2)

· Gán một chuỗi sao chép khi ghi cho một phần tử stash không còn gây ra tình trạng rảnh gấp đôi.
Bất kể sự thay đổi này, kết quả của các nhiệm vụ đó vẫn chưa được xác định.

· Việc gán một chuỗi sao chép khi ghi cho một biến bị ràng buộc không còn ngăn biến đó khỏi
bị ràng buộc nếu đó là PVMG hoặc PVLV trong nội bộ.

· Thực hiện thay thế một biến bị ràng buộc trả về một đại lượng vô hướng sao chép khi ghi được sử dụng để gây ra
lỗi xác nhận hoặc cảnh báo "Cố gắng giải phóng chuỗi chia sẻ không tồn tại".

· Đây là hồi quy từ 5.12: Trong 5.14.0, toán tử gán bit "|=",
"^=" và "&=" bắt đầu không xác định được vế trái nếu nó là một
chuỗi sao chép khi ghi [Perl #108480].

· Có thể lưu trữ, Devel::Peek và PerlIO::scalar có vấn đề tương tự. Xem "Mô-đun cập nhật
và Pragmata”, ở trên.

Sản phẩm trình sửa lỗi
· bãi rác.plvà do đó lệnh "x" trong trình gỡ lỗi đã được sửa để xử lý
các đối tượng được xếp vào các lớp có tên chứa "=". Nội dung của các đối tượng đó
đã từng không bị bán phá giá [Perl #101814].

· Lệnh "R" để khởi động lại phiên gỡ lỗi đã được sửa để hoạt động trên Windows,
hoặc bất kỳ hệ thống nào khác thiếu hằng số "POSIX::_SC_OPEN_MAX" [Perl #87740].

· Lệnh "#line 42 foo" được sử dụng không để cập nhật mảng các dòng được sử dụng bởi
trình gỡ lỗi nếu nó xảy ra trong một chuỗi eval. Điều này đã được sửa một phần trong 5.14, nhưng nó
chỉ hoạt động với một "#dòng 42 foo" trong mỗi eval. Bây giờ nó hoạt động cho nhiều.

· Khi các cuộc gọi chương trình con bị chặn bởi trình gỡ lỗi, tên của chương trình con hoặc một
tham chiếu đến nó được lưu trữ trong $DB::sub, để trình gỡ lỗi truy cập. Đôi khi (như
"$foo = *bar; undef *bar; &$foo") $DB::sub sẽ được đặt thành một tên không thể có
được sử dụng để tìm chương trình con và do đó nỗ lực gọi nó của trình gỡ lỗi sẽ không thành công. Hiện nay
việc kiểm tra xem liệu có cần tham chiếu hay không là mạnh mẽ hơn, vì vậy những vấn đề đó
không nên xảy ra nữa [rt.cpan.org #69862].

· Mỗi chương trình con có một tên tập tin gắn liền với nó mà trình gỡ lỗi sử dụng. cái một
liên kết với các chương trình con không đổi từng bị phân bổ sai khi được sao chép dưới
chủ đề. Do đó, việc gỡ lỗi các ứng dụng theo luồng có thể dẫn đến hao hụt bộ nhớ.
tham nhũng [Perl #96126].

Tham khảo ý kiến khai thác
· "d xác định(${"..."})", "d xác định(*{"..."})", v.v., được sử dụng để trả về giá trị đúng cho hầu hết, nhưng không phải
tất cả các biến có sẵn nếu chúng chưa được sử dụng. Lỗi này bị ảnh hưởng
"${^GLOBAL_PHASE}" và "${^UTF8CACHE}", cùng nhiều thứ khác. Nó cũng được sử dụng để trả về false nếu
tên gói cũng được cung cấp ("${"::!"}") [perl #97978, #97492].

· Perl 5.10.0 đã giới thiệu một lỗi tương tự: "defined(*{"foo"})" trong đó "foo" đại diện cho
tên của biến toàn cục tích hợp được sử dụng để trả về false nếu biến đó chưa bao giờ
được sử dụng trước đây nhưng chỉ trên Thành phố điện khí hóa phía tây dãy núi Rocky đầu tiên gọi. Điều này cũng đã được sửa.

· Kể từ phiên bản 5.6.0, "*{ ... }" đã không nhất quán trong cách xử lý các giá trị không xác định. Nó
sẽ chết trong chế độ nghiêm ngặt hoặc ngữ cảnh giá trị đối với hầu hết các giá trị không xác định, nhưng sẽ là
được coi là chuỗi rỗng (có cảnh báo) cho kết quả trả về vô hướng cụ thể bằng
"undef()" (&PL_sv_undef nội bộ). Điều này đã được sửa chữa. "undef()" bây giờ là
được xử lý giống như các đại lượng vô hướng không xác định khác, như trong Perl 5.005.

Xử lý tập tin, Lần truy cập cuối cùng
Perl có một biến nội bộ lưu trữ tước hiệu tệp cuối cùng được truy cập. Nó được sử dụng
bằng $. và bằng "tell" và "eof" mà không cần tranh luận.

· Trước đây có thể đặt biến nội bộ này thành bản sao toàn cầu và sau đó sửa đổi
bản sao toàn cầu đó là một cái gì đó không phải là toàn cầu và vẫn có bản sao được truy cập lần cuối
tước hiệu tệp được liên kết với biến sau khi gán lại một toàn cầu cho nó:

$foo = *STDOUT của tôi; # $foo là một bản sao toàn cầu
<$foo>; # $foo hiện là địa chỉ được truy cập lần cuối
$foo = 3; # không còn là quả cầu nữa
$foo = *STDERR; # vẫn là phần xử lý được truy cập lần cuối

Bây giờ phép gán "$foo = 3" hủy đặt biến nội bộ đó, do đó không có biến cuối cùng-
đã truy cập tước hiệu tệp, cứ như thể "<$foo>" chưa từng xảy ra.

Điều này cũng ngăn một số thẻ điều khiển không liên quan trở thành thẻ điều khiển được truy cập lần cuối nếu
$foo nằm ngoài phạm vi và cùng một SV nội bộ được sử dụng cho một thẻ điều khiển khác [perl
# 97988].

· Hồi quy trong 5.14 khiến các câu lệnh này không đặt biến nội bộ đó:

$fh của tôi = *STDOUT;
nói với $fh;
eof $fh;
tìm kiếm $fh, 0,0;
nói với *$fh;
eof *$fh;
tìm kiếm *$fh, 0,0;
dòng đọc *$fh;

Điều này hiện đã được sửa, nhưng "tell *{ *$fh }" vẫn gặp sự cố và không rõ bằng cách nào
để sửa nó [Perl #106536].

Filetests "thống kê"
Thuật ngữ "filetests" dùng để chỉ các toán tử bao gồm một dấu gạch nối theo sau là một dấu gạch ngang
chữ cái: "-r", "-x", "-M", v.v. Thuật ngữ "xếp chồng" khi áp dụng cho filetests có nghĩa là
theo sau là toán tử filetest khác chia sẻ cùng toán hạng, như trong "-r -x -w $fooo".

· "stat" tạo ra những cảnh báo nhất quán hơn. Nó không còn cảnh báo về "_" [Perl #71002]
và đôi khi không còn bỏ qua cảnh báo đối với các tay cầm chưa mở khác. Nó không còn
cảnh báo về một tay cầm chưa mở khi chức năng "fstat" của hệ điều hành bị lỗi.

· "stat" đôi khi trả về số âm cho số inode lớn, bởi vì nó
sử dụng sai loại C nội bộ. [trạng thái #84590]

· "lstat" được ghi lại để quay trở lại "stat" (có cảnh báo) khi được cấp một tước hiệu tệp.
Khi được chuyển một tham chiếu IO, nó thực sự hoạt động tương đương với "stat _" và
bỏ qua tay cầm.

· "-T _" không có "stat" đứng trước được sử dụng để tạo ra cảnh báo "chưa được khởi tạo" khó hiểu,
mặc dù không có giá trị chưa được khởi tạo rõ ràng nào để nói đến.

· "-T", "-B", "-l" và "-t" hiện hoạt động khi được xếp chồng với các toán tử filetest khác [perl
# 77388].

· Trong 5.14.0, các hoạt động filetest ("-r", "-x", v.v.) bắt đầu gọi FETCH trên một đối số ràng buộc
thuộc đối số trước đó của toán tử danh sách, nếu được gọi bằng từ trần
tranh luận hoặc không có tranh luận gì cả. Điều này đã được sửa, vì vậy "push @foo, $tied, -r" không
gọi FETCH lâu hơn trên $tied.

· Trong Perl 5.6, "-l" theo sau là bất kỳ từ nào khác ngoài từ trần sẽ xử lý đối số của nó
dưới dạng tên tập tin. Điều đó đã được thay đổi trong phiên bản 5.8 đối với các tham chiếu toàn cục ("\*foo"), nhưng không thay đổi đối với
bản thân chúng (*foo). "-l" bắt đầu trả về "undef" cho các tham chiếu toàn cầu mà không có
thiết lập bộ đệm chỉ số cuối cùng mà thẻ điều khiển "_" sử dụng, nhưng chỉ khi có cảnh báo
đã bật lên. Khi tắt cảnh báo, nó giống như 5.6. Nói cách khác, nó chỉ đơn giản là
lỗi và không nhất quán. Bây giờ hành vi 5.6 đã được khôi phục.

· "-l" theo sau là một từ trống không còn "ăn" đối số trước đó vào danh sách
toán tử có danh sách đối số chứa nó. Do đó, bây giờ thực tế là "in "bar", -l foo"
in "bar", bởi vì "-l" sẽ ăn nó lâu hơn.

· Perl giữ một số biến nội bộ để theo dõi bộ đệm chỉ số cuối cùng, từ
tập tin (xử lý) nào nó bắt nguồn, nó thuộc loại gì và liệu chỉ số cuối cùng có
đã thành công.

Có nhiều trường hợp trong đó chúng có thể không đồng bộ, dẫn đến kết quả không nhất quán.
hoặc hành vi thất thường trong các trường hợp đặc biệt (mọi đề cập đến "-T" cũng áp dụng cho "-B"):

· "-T XỬ LÝ", mặc dù nó có "chỉ số", nhưng không đặt lại loại chỉ số cuối cùng,
do đó, "lstat _" theo sau nó sẽ vui vẻ trả về kết quả sai. Ngoài ra, nó đã được
không thiết lập trạng thái thành công.

· Giải phóng bộ điều khiển được sử dụng lần cuối bởi "stat" hoặc filetest có thể dẫn đến "-T _" khi sử dụng
một tay cầm không liên quan.

· "stat" với tham chiếu IO sẽ không đặt lại loại chỉ số hoặc ghi lại tước hiệu tệp
để sử dụng "-T _".

· Cảnh báo nghiêm trọng có thể khiến bộ đệm chỉ số không được đặt lại cho người vận hành filetest
trên tước hiệu tệp chưa mở hoặc "-l" trên bất kỳ tước hiệu tệp nào. Cảnh báo nghiêm trọng cũng dừng "-T"
từ việc thiết lập $!.

· Khi chỉ số cuối cùng nằm ở một tập tin không thể đọc được, "-T _" sẽ trả về
"undef", giữ nguyên bộ đệm chỉ số cuối cùng. Nhưng nó đang thiết lập chỉ số
gõ, khiến "lstat _" ngừng hoạt động.

· "-T FILENAME " không đặt lại bộ đệm thống kê nội bộ cho các tệp không thể đọc được.

Tất cả đều đã được sửa.

Định dạng
· Một số trường hợp cạnh đã được sửa với các định dạng và "đường biểu mẫu"; đặc biệt là ở đâu
bản thân định dạng có khả năng thay đổi (chẳng hạn như có ràng buộc và quá tải) và
trong đó định dạng và dữ liệu khác nhau trong mã hóa của chúng. Trong cả hai trường hợp này, nó thường
có thể đầu ra bị hỏng [Perl #91032].

· "formline" không còn chuyển đổi đối số của nó thành một chuỗi tại chỗ. Vì vậy, vượt qua một
tham chiếu đến "formline" không còn hủy tham chiếu [Perl #79532].

· Việc gán cho $^A (bộ tích lũy đầu ra định dạng) hiện tính toán lại số dòng
đầu ra.

"được" "khi nào"
· "đã cho" không xác định đúng phạm vi $_ tiềm ẩn của nó, dẫn đến rò rỉ bộ nhớ hoặc
Cảnh báo "Biến không có sẵn" [Perl #94682].

· "được cho" không gọi set-magic theo từ vựng ẩn $_ mà nó sử dụng. Cái này
có nghĩa là, ví dụ, "pos" sẽ được ghi nhớ từ một lần thực hiện cùng một
khối "đã cho" cho khối tiếp theo, ngay cả khi đầu vào là một biến khác [Perl #84526].

· Các khối "khi" bây giờ có khả năng trả về các biến được khai báo bên trong khối bao quanh
khối "đã cho" [Perl #93548].

Sản phẩm "quả cầu" nhà điều hành
· Trên các hệ điều hành không phải VMS, toán tử "glob" của Perl (và dạng "<...>") sử dụng File::Glob
bên dưới. Tệp::Glob chia mẫu thành các từ, trước khi đưa từng từ vào
chức năng "bsd_glob".

Có một số điểm mâu thuẫn trong cách thực hiện việc phân chia. Bây giờ dấu ngoặc kép
(' và ") luôn được coi là dấu phân cách từ kiểu shell (cho phép khoảng trắng như
một phần của từ) và dấu gạch chéo ngược luôn được giữ nguyên, trừ khi chúng tồn tại để thoát
dấu ngoặc kép. Trước đây, điều đó đôi khi chỉ xảy ra, tùy thuộc vào việc liệu
mẫu chứa khoảng trắng. Ngoài ra, thoát khoảng trắng ở cuối mẫu
không còn bị tước bỏ [Perl #40470].

· "CORE::glob" hiện hoạt động như một cách gọi hàm toàn cầu mặc định. Nó đã từng
ghi đè tôn trọng, bất chấp tiền tố "CORE::".

· Trong miniperl (được sử dụng để cấu hình các mô-đun khi Perl được xây dựng), bây giờ "toàn cầu"
xóa %ENV trước khi gọi csh, vì cái sau sẽ kêu trên một số hệ thống nếu nó không
giống như nội dung của biến môi trường LS_COLORS [Perl #98662].

giá trị chương trình con
· Trả về rõ ràng bây giờ trả về đối số thực tế được truyền để trả về, thay vì sao chép
nó [Perl #72724, #72706].

· Các chương trình con Lvalue được sử dụng để thực thi cú pháp lvalue (tức là bất cứ thứ gì có thể ở bên trái-
phía bên kia của "=") cho câu lệnh cuối cùng và các đối số cần trả về. Vì giá trị
các chương trình con không phải lúc nào cũng được gọi trong ngữ cảnh lvalue, hạn chế này đã được dỡ bỏ.

· Các chương trình con Lvalue ít hạn chế hơn về những giá trị nào có thể được trả về. Nó đã từng
thay đổi các giá trị được trả về bởi "shift" và "delete" và từ các chương trình con khác, nhưng không
lâu hơn nữa [Perl #71172].

· Các chương trình con lvalue trống ("sub :lvalue {}") được sử dụng để trả về @_ trong ngữ cảnh danh sách. Tất cả
các chương trình con thường thực hiện việc này, nhưng các chương trình con thông thường đã được sửa trong Perl 5.8.2. Bây giờ giá trị
các chương trình con cũng đã được sửa chữa tương tự.

· Tính năng tự động hóa hiện hoạt động trên các giá trị được trả về từ các chương trình con lvalue [Perl #7946], như
trả về "khóa" trong ngữ cảnh lvalue.

· Các chương trình con Lvalue được sử dụng để sao chép các giá trị trả về của chúng trong ngữ cảnh rvalue. Không chỉ đã
điều này gây lãng phí chu kỳ CPU nhưng cũng gây ra lỗi. Nguyên mẫu "($)" sẽ gây ra
lvalue sub để sao chép giá trị trả về của nó [Perl #51408] và "while(lvalue_sub() =~ m/.../g)
{ ... }" sẽ lặp lại vô tận [Perl #78680].

· Khi được gọi trong bối cảnh giá trị tiềm năng (ví dụ: đối số chương trình con hoặc danh sách được thông qua
thành "for"), các chương trình con lvalue được sử dụng để sao chép bất kỳ giá trị chỉ đọc nào được trả về.
Ví dụ: " sub :lvalue { $] } " sẽ không trả về $] mà là một bản sao của nó.

· Khi được gọi trong bối cảnh lvalue tiềm năng, một mảng hoặc chương trình con lvalue trả về
các hàm băm được sử dụng để liên kết các mảng hoặc hàm băm với các biến vô hướng, dẫn đến lỗi. Cái này
đã được sửa trong phiên bản 5.14.0 nếu một mảng là thứ đầu tiên được trả về từ chương trình con (nhưng
không dành cho "$scalar, @array" hoặc giá trị băm được trả về). Bây giờ đã có một bản sửa lỗi tổng quát hơn
đã áp dụng [Perl #23790].

· Các lệnh gọi phương thức có các đối số được bao quanh bởi "my()" hoặc "our()" (như trong
"$object->method(my($a,$b))") được sử dụng để buộc bối cảnh lvalue trên chương trình con. Cái này
sẽ ngăn các phương thức giá trị trả về các giá trị nhất định.

· Các lệnh gọi phụ Lvalue không được xác định là như vậy tại thời điểm biên dịch (&$name hoặc
&{"name"}) không còn được miễn trừ khỏi các giới thiệu nghiêm ngặt nếu chúng xuất hiện trong câu lệnh cuối cùng
của chương trình con lvalue [Perl #102486].

· Các cuộc gọi phụ mà các cuộc gọi phụ không hiển thị tại thời điểm biên dịch, nếu chúng xảy ra trong lần cuối cùng
câu lệnh của một chương trình con có giá trị lvalue, sẽ từ chối các chương trình con không có giá trị lvalue và chết với
"Không thể sửa đổi lệnh gọi chương trình con không có giá trị" [Perl #102486].

Các cuộc gọi phụ không có giá trị có số phụ đang có thể nhìn thấy tại thời điểm biên dịch thể hiện điều ngược lại
sâu bọ. Nếu cuộc gọi xảy ra trong câu lệnh cuối cùng của chương trình con lvalue, sẽ có
không có lỗi khi phụ lvalue được gọi trong ngữ cảnh lvalue. Perl sẽ mù quáng
gán cho giá trị tạm thời được trả về bởi chương trình con không có giá trị.

· Các thói quen "TẢI TỰ ĐỘNG" được sử dụng để được ưu tiên hơn phần phụ thực tế được gọi (nghĩa là
khi không cần tải tự động), đối với các lệnh gọi phụ trong ngữ cảnh lvalue hoặc lvalue tiềm năng,
nếu chương trình con không hiển thị tại thời điểm biên dịch.

· Áp dụng thuộc tính ":lvalue" cho XSUB hoặc cho một nhánh chương trình con có bí danh với "sub
foo :lvalue;" cú pháp đã ngừng hoạt động trong Perl 5.12. Điều này đã được sửa.

· Áp dụng thuộc tính :lvalue cho chương trình con đã được xác định không hoạt động
đúng cách, vì thuộc tính thay đổi cách biên dịch phụ. Do đó, Perl 5.12
bắt đầu cảnh báo khi cố gắng áp dụng thuộc tính cho một thuộc tính đã được xác định
phụ. Trong những trường hợp như vậy, thuộc tính sẽ bị loại bỏ.

Nhưng thay đổi trong 5.12 đã bỏ lỡ trường hợp cũng có thuộc tính tùy chỉnh: đó
trường hợp vẫn áp dụng thuộc tính một cách âm thầm và không hiệu quả. Sự thiếu sót đó giờ đây đã có
đã được sửa chữa. "sub foo :lvalue :Whatever" (khi "foo" đã được xác định) hiện cảnh báo
về thuộc tính :lvalue và không áp dụng nó.

· Một lỗi ảnh hưởng đến việc truyền bá ngữ cảnh lvalue thông qua các lệnh gọi chương trình con lvalue lồng nhau có
đã được sửa. Trước đây, việc trả về một giá trị trong ngữ cảnh giá trị lồng nhau sẽ được xử lý
như bối cảnh giá trị bằng lệnh gọi chương trình con bên trong, dẫn đến một số giá trị (chẳng hạn như
giá trị chỉ đọc) bị từ chối.

Quá tải
· Phép gán số học ("$left += $right") liên quan đến các đối tượng bị quá tải dựa vào
ghi đè 'nomethod' không còn bị lỗi khi toán hạng bên trái không bị quá tải.

· Các lỗi xảy ra khi không thể tìm thấy các phương thức trong quá trình nạp chồng giờ đây đề cập đến
tên gói chính xác, như họ đã làm trong 5.8.x, thay vì đề cập sai đến
gói "quá tải" như đã có từ phiên bản 5.10.0.

· Không xác định %overload:: không còn gây ra sự cố.

Sản phẩm mẫu of được xây dựng trong từ khóa
· Chức năng "prototype" không còn bị chết đối với "__FILE__", "__LINE__" và
Chỉ thị "__PACKAGE__". Bây giờ nó trả về một nguyên mẫu chuỗi rỗng cho chúng, bởi vì
về mặt cú pháp, chúng không thể phân biệt được với các hàm vô giá trị như "thời gian".

· "prototype" bây giờ trả về "undef" cho tất cả các toán tử infix có thể ghi đè, chẳng hạn như "eq",
không thể gọi được theo bất kỳ cách nào giống với các hàm. Nó được sử dụng để trả về không chính xác
nguyên mẫu cho một số người và chết cho những người khác [Perl #94984].

· Nguyên mẫu của một số hàm dựng sẵn-- "getprotobynumber", "lock", "not" và
"chọn"--đã được sửa, hoặc ít nhất giờ đã gần với thực tế hơn trước.

Đều đặn biểu thức
· "/[[:ascii:]]/" và "/[[:blank:]]/" hiện sử dụng quy tắc ngôn ngữ trong phần "sử dụng ngôn ngữ" khi
nền tảng hỗ trợ điều đó. Trước đây, họ đã sử dụng bộ ký tự gốc của nền tảng.

· "m/[[:ascii:]]/i" và "/\p{ASCII}/i" bây giờ khớp giống hệt nhau (khi không ở dưới một giá trị khác nhau
địa phương). Điều này khắc phục sự hồi quy được giới thiệu trong 5.14 trong đó biểu thức đầu tiên
có thể khớp với các ký tự bên ngoài ASCII, chẳng hạn như KELVIN SIGN.

· "/.*/g" đôi khi sẽ từ chối khớp ở cuối chuỗi kết thúc bằng "\n".
Điều này đã được sửa [Perl #109206].

· Bắt đầu từ phiên bản 5.12.0, Perl thường làm cho sổ sách kế toán nội bộ của nó trở nên lộn xộn sau đó
gán "${ qr// }" cho phần tử băm và khóa nó bằng Hash::Util. Đây có thể
dẫn đến sự giải phóng gấp đôi, sự cố hoặc hành vi thất thường.

· Công cụ sửa đổi biểu thức chính quy mới (trong 5.14.0) "/ a" khi được lặp lại như cấm "/ aa"
các ký tự bên ngoài phạm vi ASCII khớp với các ký tự bên trong phạm vi đó từ
khớp dưới "/ i". Điều này không hoạt động trong một số trường hợp, tất cả đều liên quan đến
luân phiên, chẳng hạn như:

"\ N {KELVIN SIGN}" = ~ / k | foo / iaa;

đã thành công một cách không thích hợp. Điều này hiện đã được sửa chữa.

· 5.14.0 đã giới thiệu một số lỗi rò rỉ bộ nhớ trong các lớp ký tự biểu thức chính quy như
"[\w\s]", hiện đã được sửa. (5.14.1)

· Một trường hợp cạnh trong đối sánh biểu thức chính quy có thể lặp lại. Điều này đã xảy ra
chỉ dưới "/ i" trong các lớp ký tự được đặt trong ngoặc đơn có các ký tự có đa
các nếp gấp ký tự và chuỗi mục tiêu để so khớp bao gồm phần đầu tiên của
màn hình đầu tiên, theo sau là một ký tự khác có màn hình đầu tiên nhiều ký tự bắt đầu
với phần còn lại của nếp gấp, cộng với một số khác.

"s \ N {U + DF}" = ~ / [\ x {DF} foo] / i

là một trường hợp như vậy "\xDF" gấp thành "ss". (5.14.1)

· Một vài ký tự trong các mẫu biểu thức chính quy không khớp chính xác trong một số
hoàn cảnh, tất cả đều liên quan đến "/i". Các nhân vật bị ảnh hưởng là: KẾT HỢP HY LẠP
YPOGEGRAMMENI, THƯ VỐN HY LẠP IOTA, THƯ VỐN HY LẠP UPSILON, HY LẠP
PROSGEGRAMMENI, THƯ NHỎ HY LẠP IOTA VỚI DIALYTIKA VÀ OXIA, THƯ NHỎ HY LẠP
IOTA VỚI DIALYTIKA VÀ TONOS, UPSILON THƯ NHỎ HY LẠP VỚI DIALYTIKA VÀ OXIA,
THƯ NHỎ HY LẠP UPSILON VỚI DIALYTIKA VÀ TONOS, THƯ NHỎ LATIN LONG S, LATIN
CHỮ NHỎ DÀI ST, và LATIN CHỮ NHỎ ST.

· Hồi quy rò rỉ bộ nhớ trong quá trình biên dịch biểu thức chính quy theo luồng đã được
đã sửa.

· Đã sửa lỗi hồi quy trong phiên bản 5.14.0. Điều này liên quan đến một dấu ngoặc ngược
lớp ký tự trong một biểu thức chính quy chỉ bao gồm thuộc tính Unicode.
Thuộc tính đó không bị đảo ngược ngoài phạm vi Latin1.

· Ba ký tự Unicode có vấn đề hiện hoạt động tốt hơn trong việc khớp mẫu biểu thức chính quy trong
"/Tôi".

Trước đây, ba ký tự Unicode: LATIN SMALL LETTER SHARP S, GREEK SMALL LETTER
IOTA VỚI DIALYTIKA VÀ TONOS, và UPSILON THƯ NHỎ HY LẠP VỚI DIALYTIKA VÀ
TONOS, cùng với các chuỗi mà chúng gấp lại (bao gồm cả "ss" cho LATIN SMALL
LETTER SHARP S), không khớp chính xác với "/i". 5.14.0 đã sửa một số trường hợp này,
nhưng đã giới thiệu những người khác, bao gồm cả sự hoảng sợ khi một trong các nhân vật hoặc phân cảnh bị
được sử dụng trong vị từ biểu thức chính quy "(?(DEFINE)". Các lỗi đã biết là
được giới thiệu trong phiên bản 5.14 hiện đã được sửa; cũng như một số trường hợp đặc biệt khác có
chưa bao giờ làm việc cho đến bây giờ. Tất cả đều liên quan đến việc sử dụng các ký tự và trình tự bên ngoài
các lớp ký tự được đặt trong ngoặc trong "/i". Việc này sẽ đóng [Perl #98546].

Vẫn còn những vấn đề đã biết khi sử dụng một số ký tự nhất định có nếp gấp nhiều ký tự
bên trong các lớp ký tự được đặt trong ngoặc, bao gồm các cấu trúc như "qr/[\N{LATIN SMALL
LETTER SHARP}az]/i". Những lỗi còn lại này được giải quyết trong [perl #89774].

· RT #78266: Công cụ biểu thức chính quy đã bị rò rỉ bộ nhớ khi truy cập vào các ảnh chụp có tên đó
không được khớp như một phần của biểu thức chính quy kể từ phiên bản 5.10 khi chúng được giới thiệu; ví dụ,
điều này sẽ tiêu tốn hơn một trăm MB bộ nhớ:

cho (1..10_000_000) {
if ("foo" =~ /(foo|(? quán ba))?/) {
$capture của tôi = $+{capture}
}
}
hệ thống "ps -o rss $$"'

· Trong 5.14, "/[[:low:]]/i" và "/[[:upper:]]/i" không còn khớp với trường hợp ngược lại.
Điều này đã được sửa [Perl #101970].

· Một biểu thức chính quy khớp với một đối tượng bị quá tải ở phía bên phải sẽ
đôi khi xâu chuỗi đối tượng quá nhiều lần.

· Một hồi quy đã được sửa đã được giới thiệu trong 5.14, trong biểu thức chính quy "/ i"
đối sánh, trong đó đối sánh không thành công nếu mẫu nằm trong UTF-8, mục tiêu
chuỗi thì không và ký tự Latinh-1 đứng trước một ký tự trong chuỗi nên
phù hợp với mẫu. [perl # 101710]

· Trong đối sánh mẫu biểu thức chính quy không phân biệt chữ hoa chữ thường, không còn trên mã hóa UTF-8 nữa
chuỗi thực hiện quá trình quét để bắt đầu trận đấu chỉ nhìn vào vị trí có thể đầu tiên.
Điều này khiến các kết quả khớp như "" f \ x {FB00} "= ~ / ff / i" không thành công.

· Trình tối ưu hóa regrec không còn gặp sự cố khi gỡ lỗi các bản dựng khi hợp nhất chuỗi cố định
các nút có nội dung bất tiện.

· Một sự hoảng loạn liên quan đến sự kết hợp của các công cụ sửa đổi biểu thức chính quy "/aa" và
Trình tự thoát "\b" được giới thiệu trong 5.14.0 đã được sửa [Perl #95964]. (5.14.2)

· Sự kết hợp của các công cụ sửa đổi biểu thức chính quy "/aa" và lối thoát "\b" và "\B"
các chuỗi không hoạt động chính xác trên các chuỗi được mã hóa UTF-8. Tất cả các ký tự không phải ASCII
bên dưới "/aa" phải được coi là các ký tự không phải từ, nhưng điều đang xảy ra là
Các quy tắc Unicode được sử dụng để xác định độ dài/không độ dài của các ký tự không phải ASCII.
Điều này hiện đã được sửa [Perl #95968].

· "(?foo: ...)" không còn bị mất trong bộ ký tự nữa.

· Việc tối ưu hóa trie từng gặp vấn đề với các lựa chọn thay thế chứa một khoảng trống
"(?:)", khiến ""x" =~ /\A(?>(?:(?:)A|B|C?x))\z/" không khớp, trong khi đó thì phải
[perl # 111842].

· Việc sử dụng các biến từ vựng ("của tôi") trong các khối mã được nhúng trong các biểu thức thông thường sẽ không
còn dẫn đến hỏng bộ nhớ hoặc treo máy.

Tuy nhiên, các khối mã này vẫn đang trong giai đoạn thử nghiệm vì vẫn còn một số vấn đề.
với các biến sai bị đóng lại (ví dụ trong các vòng lặp) và với các biến bất thường
thoát ra (ví dụ: "chết") gây ra hỏng bộ nhớ.

· Các siêu ký tự biểu thức chính quy "\h", "\H", "\v" và "\V" được sử dụng để gây hoảng loạn
thông báo lỗi khi cố gắng khớp ở cuối chuỗi [Perl #96354].

· Các chữ viết tắt của bốn ký tự điều khiển C1 "MW" "PM", "RI" và "ST" là
trước đây không được "\N{}" công nhận, vianame()string_vianame().

· Đề cập đến một biến có tên "&" không phải $& (tức là "@&" hoặc "%&") không còn dừng $&
từ làm việc. Điều tương tự cũng áp dụng cho các biến có tên "'" và "`" [Perl #24237].

· Tạo phụ "UNIVERSAL::AUTOLOAD" không còn dừng "%+", "%-" và "%!" từ làm việc
đôi khi [Perl #105024].

Đối sánh thông minh
· "~~" bây giờ xử lý chính xác mức độ ưu tiên của Bất kỳ~~Đối tượng nào và không bị lừa bởi một đối tượng
đối tượng bị quá tải ở phía bên trái.

· Trong Perl 5.14.0, "$ tainted ~~ @array" ngừng hoạt động bình thường. Đôi khi nó sẽ
thất bại một cách sai lầm (khi $ tainted chứa một chuỗi xuất hiện trong mảng sau khi các
phần tử đầu tiên) hoặc thành công sai (khi "undef" xảy ra sau phần tử đầu tiên)
[perl # 93590].

Sản phẩm "loại" nhà điều hành
· "sắp xếp" không coi "sub {}" và "sub {()}" là tương đương khi sub đó được
được cung cấp như là thói quen so sánh. Nó từng kêu "sub {()}".

· "sắp xếp" hiện hoạt động trở lại với các quy trình sắp xếp tùy chỉnh là XSUB. Nó đã dừng lại
làm việc trong 5.10.0.

· "sắp xếp" bằng một hằng số cho quy trình sắp xếp tùy chỉnh, mặc dù nó tạo ra các kết quả chưa được sắp xếp
kết quả, không còn gặp sự cố. Nó bắt đầu gặp sự cố vào phiên bản 5.10.0.

· Cảnh báo được phát ra bởi "sắp xếp" khi thói quen so sánh tùy chỉnh trả về một giá trị không phải số
giá trị hiện chứa "sắp xếp" và hiển thị số dòng của toán tử "sắp xếp", thay vào đó
hơn dòng cuối cùng của thủ tục so sánh. Các cảnh báo bây giờ cũng chỉ xảy ra nếu
cảnh báo được bật trong phạm vi xảy ra "sắp xếp". Trước đây những lời cảnh báo sẽ
xảy ra nếu được bật trong phạm vi của quy trình so sánh.

· "sort { $a <=> $b }", được tối ưu hóa nội bộ, hiện tạo ra "chưa được khởi tạo"
cảnh báo cho NaN (giá trị không phải là số), vì "<=>" trả về "undef" cho những giá trị đó. Cái này
làm cho nó phù hợp với "sort { 1; $a <=> $b }" và các trường hợp phức tạp hơn khác, đó là
không được tối ưu hóa [Perl #94390].

Sản phẩm "chất nền" nhà điều hành
· Các biến bị ràng buộc (và nếu không thì là phép thuật) không còn được miễn khỏi "Cố gắng sử dụng
tham chiếu dưới dạng cảnh báo lvalue trong chất nền".

· Cảnh báo đó bây giờ xảy ra khi giá trị trả về được gán cho, không phải khi "substr"
chính nó được gọi. Điều này chỉ tạo ra sự khác biệt nếu giá trị trả về của "substr" là
được tham chiếu và sau đó được gán cho.

· Truyền một chuỗi con của giá trị chỉ đọc hoặc một kiểu chữ cho một hàm (giá trị tiềm năng
ngữ cảnh) không còn gây ra ngay lập tức "Không thể ép buộc" hoặc "Sửa đổi chế độ chỉ đọc
value". Lỗi đó chỉ xảy ra nếu giá trị được truyền được gán cho.

Điều tương tự cũng xảy ra với lỗi "chất nền bên ngoài chuỗi". Nếu giá trị là
chỉ đọc từ, không được ghi vào, giờ đây nó chỉ là một cảnh báo, như với giá trị "substr".

· Phép gán "substr" không còn gọi FETCH hai lần nếu đối số đầu tiên bị ràng buộc
biến, chỉ một lần.

HỖ TRỢ cho nhúng không có giá trị
Một số phần của Perl không hoạt động chính xác với các giá trị rỗng ("chr 0") được nhúng trong chuỗi. Cái đó
có nghĩa là, chẳng hạn, "$m = "a\0b"; foo->$m" sẽ gọi phương thức "a", thay vì
tên phương thức thực tế chứa trong $m. Những phần này của Perl đã được sửa để hỗ trợ giá trị rỗng:

· Tên phương thức

· Tên Typeglob (bao gồm tên filehandle và tên chương trình con)

· Tên gói, bao gồm giá trị trả về của "ref()"

· Các phần tử Typeglob (*foo{"THING\0stuff"})

· Tên tín hiệu

· Nhiều cảnh báo và thông báo lỗi đề cập đến tên biến hoặc giá trị, phương thức,
và vv

Một tác dụng phụ của những thay đổi này là việc đưa vào "\0" không còn khiến "ref()" bị
trả về sai.

Threading lỗi
· Các kiểu chữ được trả về từ các luồng không còn được sao chép nếu luồng gốc đã có
một quả địa cầu có cùng tên. Điều này có nghĩa là các chương trình con được trả về bây giờ sẽ gán cho
các biến gói phù hợp [Perl #107366].

· Đã khắc phục một số trường hợp lỗi luồng do cấp phát bộ nhớ trong quá trình nhân bản
[perl # 90006].

· Việc nối luồng đôi khi sẽ đưa ra cảnh báo "Cố gắng giải phóng vô hướng không được tham chiếu" nếu
"người gọi" đã được sử dụng từ gói "DB" trước khi tạo luồng [Perl #98092].

· Khóa một chương trình con (thông qua "lock &sub") không còn là lỗi thời gian biên dịch đối với chương trình con thông thường
phụ. Đối với các chương trình con giá trị lvalue, nó không còn cố gắng trả về giá trị con dưới dạng vô hướng nữa,
dẫn đến các tác dụng phụ lạ như "ref \$_" trả về "CODE" trong một số trường hợp.

"lock &sub" hiện là lỗi thời gian chạy nếu thread::shared được tải (nếu không thì không hoạt động),
nhưng điều đó có thể được khắc phục trong phiên bản tương lai.

Bị ràng buộc biến
· Nhiều trường hợp FETCH bị bỏ qua hoặc được gọi quá nhiều lần
đã sửa:

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

· "$tied =~ y/a/b/", "chop $tied" và "chomp $tied" khi $tied giữ một tham chiếu.

· Khi gọi "local $_" [perl #105912]

· Bốn đối số "chọn"

· Một bộ đệm bị ràng buộc được chuyển tới "sysread"

· "$ bị ràng buộc .= <>"

· Ba đối số "mở", đối số thứ ba là một thẻ điều khiển tập tin bị ràng buộc (như trong "open $fh, ">&",
$bị ràng buộc")

· "sắp xếp" có tham chiếu đến một hình cầu được gắn cho quy trình so sánh.

· ".." và "..." trong ngữ cảnh danh sách [Perl #53554].

· "${$tied}", "@{$tied}", "%{$tied}" và "*{$tied}" trong đó biến bị ràng buộc trả về
một chuỗi ("&{}" không bị ảnh hưởng)

· "đã xác định ${ $tied_variable }"

· Các hàm khác nhau lấy đối số tước hiệu tệp trong ngữ cảnh giá trị ("đóng",
"readline", v.v.) [perl #97482]

· Một số trường hợp hủy tham chiếu một biểu thức phức tạp, chẳng hạn như "${ (), $tied } = 1",
đã từng gọi "FETCH" nhiều lần, nhưng bây giờ gọi nó một lần.

· "$tied->method" trong đó $tied trả về tên gói--thậm chí dẫn đến lỗi
gọi phương thức, do hỏng bộ nhớ

· Các bài tập như "*$tied = \&{"..."}" và "*glob = $tied"

· "chdir", "chmod", "chown", "utime", "cắt ngắn", "stat", "lstat" và filetest
hoạt động ("-r", "-x", v.v.)

· "người gọi" đặt @DB::args thành các đối số của chương trình con khi được gọi từ gói DB.
Nó thường gặp sự cố khi làm như vậy nếu @DB::args tình cờ bị ràng buộc. Bây giờ nó kêu rền rĩ
thay thế.

· Việc buộc một phần tử của %ENV hoặc "%^H" rồi xóa phần tử đó sẽ dẫn đến một
gọi phương thức DELETE của đối tượng buộc, mặc dù việc buộc chính phần tử đó là
được cho là tương đương với việc buộc một đại lượng vô hướng (tất nhiên phần tử này là vô hướng)
[perl # 67490].

· Khi Perl tự động kích hoạt một phần tử của một mảng hoặc hàm băm gắn liền (đòi hỏi phải gọi STORE
với một tham chiếu mới), giờ đây nó gọi FETCH ngay sau STORE, thay vì
giả sử rằng FETCH sẽ trả về cùng một tham chiếu. Điều này có thể làm cho nó dễ dàng hơn
để triển khai các đối tượng bị ràng buộc [Perl #35865, #43011].

· "Chọn" bốn đối số không còn tạo ra cảnh báo "Không phải chuỗi được truyền dưới dạng bitmask"
trên các biến bị ràng buộc hoặc bị nhiễm độc là các chuỗi.

· Bản địa hóa một đại lượng vô hướng bị ràng buộc trả về một kiểu chữ không còn ngăn nó bị ràng buộc nữa
cho đến hết phạm vi.

· Cố gắng "goto" ra khỏi phương pháp xử lý bị ràng buộc được sử dụng để gây hỏng bộ nhớ hoặc
gặp sự cố. Bây giờ nó tạo ra một thông báo lỗi thay vì [Perl #8611].

· Đã sửa lỗi xảy ra khi sử dụng biến ràng buộc làm chương trình con
tham chiếu: nếu thứ cuối cùng được gán hoặc trả về từ biến là một
tham chiếu hoặc typeglob, "\&$tied" có thể bị lỗi hoặc trả về sai
chương trình con. Trường hợp tham chiếu là một phép hồi quy được giới thiệu trong Perl 5.10.0. Vì
typeglobs, có lẽ nó chưa bao giờ hoạt động cho đến bây giờ.

phiên bản đối tượng dây đàn
· Toán tử bù bitwise (và có thể cả các toán tử khác nữa) khi truyền một
vstring sẽ để lại phép thuật vstring gắn liền với giá trị trả về, mặc dù chuỗi
đã thay đổi. Điều này có nghĩa là "version->new(~v1.2.3)" sẽ tạo ra một phiên bản có giao diện
như "v1.2.3" mặc dù chuỗi được chuyển đến "version->new" thực sự là
"\376\375\374". Điều này cũng khiến cho B::Deparse phân tích sai "~v1.2.3" mà không có
"~" [Perl #29070].

· Gán một chuỗi vstring cho một biến ma thuật (ví dụ: bị ràng buộc, $!) và sau đó gán một cái gì đó
còn lại dùng để thổi bay mọi phép thuật. Điều này có nghĩa là các biến bị ràng buộc sẽ bị hủy bỏ,
$! sẽ ngừng cập nhật các cuộc gọi hệ thống không thành công, $| sẽ dừng cài đặt tự động xả,
và những trò nghịch ngợm khác sẽ xảy ra. Điều này đã được sửa.

· "version->new("version")" và "printf "%vd", "version"" không còn bị lỗi [Perl
# 102586].

· So sánh phiên bản, chẳng hạn như những điều xảy ra ngầm với "sử dụng v5.43", không còn nữa
khiến cài đặt ngôn ngữ thay đổi [Perl #105784].

· Đối tượng phiên bản không còn gây rò rỉ bộ nhớ trong ngữ cảnh boolean [Perl #109762].

Cảnh báo, định nghĩa lại
· Các chương trình con từ không gian tên "autouse" một lần nữa được miễn định nghĩa lại
cảnh báo. Điều này từng hoạt động ở phiên bản 5.005 nhưng đã bị hỏng ở phiên bản 5.6 đối với hầu hết các chương trình con.
Đối với các chương trình con được tạo qua XS xác định lại các chương trình con từ gói "tự động sử dụng", điều này
đã ngừng hoạt động vào 5.10.

· XSUB mới hiện đưa ra cảnh báo xác định lại nếu chúng ghi đè các mục con hiện có, vì chúng
đã làm trong 5.8.x. (Logic "tự động sử dụng" đã bị đảo ngược trong 5.10-14. Chỉ các chương trình con từ
không gian tên "autouse" sẽ cảnh báo khi bị ghi đè.)

· "newCONSTSUB" được sử dụng để sử dụng các gợi ý cảnh báo trong thời gian biên dịch, thay vì các gợi ý trong thời gian chạy. Các
đoạn mã sau sẽ không bao giờ tạo ra cảnh báo xác định lại, nhưng nó đã từng, nếu
"newCONSTSUB" đã xác định lại chương trình con hiện có:

cảnh báo sử dụng;
BẮT ĐẦU {
không có cảnh báo;
some_XS_function_that_calls_new_CONSTSUB();
}

· Cảnh báo xác định lại cho các chương trình con liên tục được bật theo mặc định (cái được gọi là
cảnh báo nghiêm trọng trong perldiag). Điều này chỉ xảy ra khi đó là một bài tập toàn cầu hoặc
khai báo một chương trình con Perl gây ra cảnh báo. Nếu việc tạo XSUB
đã kích hoạt cảnh báo, đó không phải là cảnh báo mặc định. Điều này đã được sửa chữa.

· Việc kiểm tra nội bộ để xem liệu có xảy ra cảnh báo xác định lại hay không được sử dụng để phát ra
cảnh báo "chưa được khởi tạo" trong những trường hợp như thế này:

sử dụng cảnh báo "chưa được khởi tạo";
sử dụng hằng số {u => undef, v => undef};
phụ foo(){u}
phụ foo(){v}

Cảnh báo, "Chưa được khởi tạo"
· Các hàm khác nhau lấy đối số tước hiệu tệp trong ngữ cảnh giá trị ("đóng",
"readline", v.v.) được sử dụng để cảnh báo hai lần đối với một phần xử lý không xác định [Perl #97482].

· "dbmopen" bây giờ chỉ cảnh báo một lần, thay vì ba lần, nếu đối số chế độ là
"undef" [Perl #90064].

· Toán tử "+=" thường không cảnh báo khi vế trái là "undef", nhưng nó đã được
làm như vậy cho các biến ràng buộc. Điều này đã được sửa [Perl #44895].

· Bản sửa lỗi trong Perl 5.14 đã đưa ra một lỗi mới, khiến các cảnh báo "chưa được khởi tạo" xuất hiện
báo cáo biến sai nếu toán tử được đề cập có hai toán hạng và một toán hạng
"%{...}" hoặc "@{...}". Điều này đã được sửa [Perl #103766].

· ".." và "..." trong ngữ cảnh danh sách hiện đề cập đến tên của biến trong "chưa được khởi tạo"
cảnh báo cho phạm vi chuỗi (trái ngược với số).

Yếu tài liệu tham khảo
· Làm suy yếu đối số đầu tiên thành phương thức "DESTROY" được gọi tự động có thể dẫn đến kết quả
trong các lỗi hoặc sự cố "HỦY đã tạo tham chiếu mới". Bây giờ nó là một lỗi
làm suy yếu một tham chiếu chỉ đọc.

· Các tham chiếu yếu đến các hàm băm từ vựng nằm ngoài phạm vi không bị lỗi thời (trở thành
không xác định), nhưng vẫn tiếp tục trỏ đến hàm băm.

· Các tham chiếu yếu đến các biến từ vựng nằm ngoài phạm vi hiện đã bị phá vỡ trước bất kỳ
các phương thức ma thuật (ví dụ: DESTROY trên một đối tượng buộc) được gọi. Điều này ngăn cản như vậy
các phương pháp sửa đổi biến sẽ được nhìn thấy vào lần tiếp theo phạm vi
nhập vào.

· Việc tạo một tham chiếu yếu tới một mảng @ISA hoặc truy cập vào chỉ mục mảng ($#ISA) có thể
dẫn đến nhầm lẫn trong sổ sách kế toán nội bộ đối với các phần tử sau này được thêm vào mảng @ISA.
Ví dụ: việc tạo một tham chiếu yếu cho chính phần tử đó có thể đẩy điểm yếu đó
tham chiếu đến @ISA; và các phần tử được thêm vào sau khi sử dụng $#ISA sẽ bị phương thức bỏ qua
tra cứu [Perl #85670].

Nền tảng khác Nổi bật nhất định
· "quotemeta" hiện trích dẫn nhất quán các ký tự không phải ASCII giống nhau trong "tính năng sử dụng
'unicode_strings'", bất kể chuỗi có được mã hóa theo UTF-8 hay không, do đó
sửa chữa những dấu tích cuối cùng (chúng tôi hy vọng) của "Lỗi Unicode" khét tiếng trong
perlunicode. [Perl #77654].

Điểm mã nào được trích dẫn đã thay đổi, dựa trên khuyến nghị của Unicode.
Xem "quotemeta" trong perlfunc để biết chi tiết.

· "nghiên cứu" hiện không hoạt động, có lẽ đã sửa tất cả các lỗi còn tồn tại liên quan đến nghiên cứu
khiến các kết quả khớp với biểu thức chính quy hoạt động không chính xác!

· Khi một người viết "open foo || die", vốn từng hoạt động trong Perl 4, một "Ưu tiên
có vấn đề" được tạo ra. Cảnh báo này được sử dụng sai để áp dụng cho toàn bộ-
tên xử lý từ trần đủ điều kiện không được theo sau bởi "||". Điều này đã được sửa chữa.

· Sau khi đặt bí danh gói ("*foo:: = *bar::"), "chọn" với đối số 0 hoặc 1 sẽ
đôi khi trả về một tên không thể được sử dụng để tham chiếu đến tước hiệu tệp, hoặc
đôi khi nó sẽ trả về "undef" ngay cả khi một tước hiệu tệp được chọn. Bây giờ nó trở lại
một tài liệu tham khảo typeglob trong những trường hợp như vậy.

· "PerlIO::get_layers" không còn bỏ qua một số đối số mà nó cho là số,
trong khi coi những cái khác là tên filehandle. Bây giờ nó đã nhất quán cho các đại lượng vô hướng phẳng
(tức là không phải tài liệu tham khảo).

· Công tắc không được nhận dạng trên "#!" đường kẻ

Nếu một công tắc, chẳng hạn như -x, điều đó không thể xảy ra trên "#!" dòng được sử dụng ở đó, perl chết
với "Không thể mô phỏng...".

Nó từng tạo ra thông báo tương tự cho các switch mà Perl hoàn toàn không nhận ra,
cho dù trên dòng lệnh hay "#!" đường kẻ.

Bây giờ nó tạo ra thông báo lỗi "Chuyển đổi không được nhận dạng" [Perl #104288].

· "hệ thống" hiện tạm thời chặn bộ xử lý tín hiệu SIGCHLD, để ngăn chặn tín hiệu
trình xử lý lấy cắp trạng thái thoát [Perl #105700].

· Mã định dạng %n cho "printf" và "sprintf", gây ra số lượng
các ký tự được gán cho đối số tiếp theo, bây giờ thực sự gán số lượng
ký tự thay vì số byte.

Hiện tại nó cũng hoạt động với các hàm giá trị đặc biệt như "substr" và không tồn tại
phần tử băm và mảng [Perl #3471, #103492].

· Perl bỏ qua việc sao chép các giá trị được trả về từ một chương trình con, vì mục đích tốc độ, nếu thực hiện
vì vậy sẽ không có sự khác biệt có thể quan sát được. Vì logic sai nên chuyện này sẽ xảy ra
với kết quả là "xóa", "shift" hoặc "nối", ngay cả khi kết quả được tham chiếu
ở nơi khác. Nó cũng làm như vậy với các biến bị ràng buộc sắp được giải phóng [Perl #91844,
# 95548].

· "utf8::decode" bây giờ từ chối sửa đổi các đại lượng vô hướng chỉ đọc [Perl #91850].

· Giải phóng $_ bên trong khối "grep" hoặc "map", khối mã được nhúng trong một khối thông thường
biểu thức hoặc bộ lọc @INC (chương trình con được trả về bởi chương trình con trong @INC) được sử dụng để
dẫn đến giải phóng gấp đôi hoặc gặp sự cố [Perl #91880, #92254, #92256].

· "eval" trả về "undef" trong ngữ cảnh vô hướng hoặc một danh sách trống trong ngữ cảnh danh sách khi có
là một lỗi thời gian chạy. Khi "eval" được truyền một chuỗi trong ngữ cảnh danh sách và cú pháp
đã xảy ra lỗi, nó được sử dụng để trả về một danh sách chứa một phần tử không xác định. Hiện nay
nó trả về một danh sách trống trong ngữ cảnh danh sách cho tất cả các lỗi [Perl #80630].

· "goto &func" không còn gặp sự cố nhưng tạo ra thông báo lỗi khi tháo gỡ
phạm vi của chương trình con hiện tại kích hoạt một hàm hủy để xác định chương trình con đang tồn tại
"goneto" [Perl #99850].

· Perl hiện giữ số lượng tham chiếu bổ sung trên gói mà mã hiện đang có
biên dịch vào. Điều này có nghĩa là đoạn mã sau không còn gặp sự cố [Perl #101486]:

gói Foo;
BẮT ĐẦU {*Foo:: = *Bar::}
foo phụ;

· Toán tử lặp lại "x" không còn gặp sự cố trên các bản dựng 64-bit có số lần lặp lại lớn
đếm [Perl #94560].

· Gọi "require" theo hàm $_ khi *CORE::GLOBAL::require đã bị ghi đè
không còn phân tách lỗi nữa và $_ hiện được chuyển đến chương trình con ghi đè [perl
# 78260].

· "sử dụng" và "yêu cầu" không còn bị ảnh hưởng bởi các lớp I/O đang hoạt động trong trình gọi
phạm vi (được bật bởi open.pm) [perl #96008].

· "$::e; $e" của chúng tôi (không hợp lệ) không còn tạo ra "Lỗi biên dịch tại
lib/utf8_heavy.pl..." thông báo lỗi bắt đầu phát ra trong 5.10.0 [perl
# 99984].

· Trên hệ thống 64-bit, "read()" bây giờ hiểu được độ lệch chuỗi lớn ngoài 32-bit
phạm vi.

· Các lỗi xảy ra khi xử lý các thuộc tính của chương trình con không còn gây ra
cây op của chương trình con bị rò rỉ.

· Việc chuyển cùng một chương trình con hằng số cho cả "chỉ mục" và "dòng biểu mẫu" không còn gây ra
cái này hay cái kia không thành công [Perl #89218]. (5.14.1)

· Liệt kê phép gán cho các biến từ vựng được khai báo với các thuộc tính trong cùng một câu lệnh
("my ($x,@y): blimp = (72,94)") đã ngừng hoạt động trong Perl 5.8.0. Bây giờ nó đã được
đã sửa.

· Perl 5.10.0 đã giới thiệu một số logic bị lỗi khiến "U *" ở giữa một gói
mẫu tương đương với "U0" nếu chuỗi đầu vào trống. Điều này đã được sửa [perl
#90160]. (5.14.2)

· Các hàm hủy trên các đối tượng không được gọi trong quá trình hủy diệt toàn cục đối với các đối tượng
không được tham chiếu bởi bất kỳ đại lượng vô hướng nào. Điều này có thể xảy ra nếu một phần tử mảng được ban phước
(ví dụ: "bless \$a[0]") hoặc nếu một bao đóng tham chiếu một biến may mắn ("bless \my @a;
phụ foo { @a }").

Giờ đây có thêm một thẻ bổ sung trong quá trình hủy diệt toàn cầu để kích hoạt các công cụ hủy diệt trên bất kỳ
các đối tượng có thể bị bỏ lại sau các lần kiểm tra thông thường để kiểm tra các đối tượng được tham chiếu bởi
vô hướng [Perl #36347].

· Đã khắc phục trường hợp có thể một bộ đệm được giải phóng có thể đã được đọc từ khi
phân tích tài liệu ở đây [Perl #90128]. (5.14.1)

· "mỗi(MẢNG)" hiện được gói trong "được xác định (...)", như "mỗi (HASH)", bên trong một "một lúc"
điều kiện [Perl #90888].

· Một vấn đề với việc truyền bá ngữ cảnh khi khối "do" là một đối số cho "return" có
đã được sửa. Nó được sử dụng để khiến "undef" được trả lại trong một số trường hợp "trả lại"
bên trong khối "if" và theo sau là khối "return" khác.

· Gọi "chỉ mục" với hằng số bị hỏng không còn gây ra hằng số sau đó
mã được biên dịch để trở nên bị nhiễm độc [Perl #64804].

· Các vòng lặp vô hạn như "1 while 1" được sử dụng để ngăn chế độ "nghiêm ngặt 'đăng ký'" hoạt động cho
phần còn lại của khối.

· Đối với các phép gán danh sách như "($a,$b) = ($b,$a)", Perl phải tạo một bản sao của các mục trên
phía bên phải trước khi gán chúng sang bên trái. Vì mục đích hiệu quả, nó
gán thẳng các giá trị bên phải cho các mục bên trái nếu không có biến nào
được đề cập ở cả hai bên, như trong "($a,$b) = ($c,$d)". Logic để xác định thời điểm
nó có thể cheat bị lỗi, ở chỗ "&&" và "||" ở phía bên phải có thể đánh lừa nó.
Vì vậy, "($a,$b) = $some_true_value && ($b,$a)" cuối cùng sẽ gán giá trị của $b cho
cả hai vô hướng.

· Perl không còn cố gắng áp dụng ngữ cảnh lvalue cho chuỗi trong "("string", $variable)
||= 1" (trước đây là lỗi). Vì vế trái của "||=" được đánh giá theo
ngữ cảnh vô hướng, đó là toán tử dấu phẩy vô hướng, cung cấp tất cả ngoại trừ mục cuối cùng void
bối cảnh. Không có cái gọi là bối cảnh giá trị trống, vì vậy đó là một sai lầm đối với Perl
để cố gắng ép buộc nó [Perl #96942].

· "Người gọi" không còn rò rỉ bộ nhớ khi được gọi từ gói DB nếu @DB :: args là
được chỉ định sau cuộc gọi đầu tiên tới "người gọi". Cá chép đã kích hoạt lỗi này [perl
#97010]. (5.14.2)

· "đóng" và các hàm xử lý tệp tương tự, khi được gọi trên các biến toàn cục có sẵn
(như $+), được sử dụng để chết nếu biến tình cờ giữ giá trị không xác định, thay vào đó
tạo ra cảnh báo "Sử dụng giá trị chưa được khởi tạo" thông thường.

· Khi các trình xử lý tệp được tự động hóa được giới thiệu trong Perl 5.6.0, "readline" là
vô tình được thực hiện để tự động kích hoạt khi được gọi là "readline($foo)" (nhưng không phải là
"<$foo>"). Bây giờ nó đã được sửa để không bao giờ tự động hóa.

· Gọi một chương trình con ẩn danh không xác định (ví dụ: $x chứa gì sau "undef &{$x =
sub{}}") được sử dụng để gây ra lỗi "Không phải tham chiếu CODE", lỗi này đã được sửa thành
"Chương trình con không xác định được gọi là" [Perl #71154].

· Làm cho @DB::args được giải phóng giữa các lần sử dụng "người gọi" không còn dẫn đến sự cố
[perl # 93320].

· "setpgrp($foo)" từng tương đương với "($foo, setpgrp)", bởi vì "setpgrp" là
bỏ qua lập luận của nó nếu chỉ có một. Bây giờ nó tương đương với
"setpgrp($foo,0)".

· "shmread" không đặt đúng cờ vô hướng khi đọc từ bộ nhớ dùng chung,
khiến cho biểu diễn số được lưu trong bộ nhớ cache hiện có trong vô hướng vẫn tồn tại [Perl
# 98480].

· "++" và "--" hiện hoạt động trên các bản sao của quả cầu, thay vì chết.

· "splice()" không cảnh báo khi cắt bớt

Bây giờ bạn có thể giới hạn kích thước của một mảng bằng cách sử dụng "splice(@a,MAX_LEN)" mà không phải lo lắng
về những cảnh báo.

· $$ không còn bị nhiễm độc. Vì giá trị này xuất phát trực tiếp từ "getpid()", nên nó
luôn an toàn.

· Trình phân tích cú pháp không còn rò rỉ tước hiệu tệp nếu STDIN bị đóng trước khi bắt đầu phân tích cú pháp
[perl # 37033].

· "chết;" với giá trị không tham chiếu, không phải chuỗi hoặc ma thuật (ví dụ: bị nhiễm độc) trong $@ ngay bây giờ
truyền bá đúng giá trị đó [Perl #111654].

Được biết Vấn đề


· Trên Solaris, chúng tôi có hai loại lỗi.

If làm cho là của Sun làm cho, chúng tôi gặp lỗi về việc gán macro bị định dạng sai trong
makefile. Điều đó xảy ra khi ./configure cố gắng làm tùy thuộc. Thiết lập sau đó thoát
0, nhưng xa hơn làm cho-ing thất bại.

If làm cho is gmake, Thiết lập hoàn thành, sau đó chúng tôi nhận được các lỗi liên quan đến
/usr/include/stdbool.h

· Trên Win32, một số bài kiểm tra bị treo trừ khi STDERR được chuyển hướng. Nguyên nhân của việc này là
vẫn đang được điều tra.

· Khi xây dựng dưới quyền root với một ô ngăn không cho người khác đọc được các tập tin,
t/op/filetest.t sẽ thất bại. Đây là lỗi kiểm tra, không phải lỗi trong hành vi của Perl.

· Định cấu hình bằng gcc gần đây và tối ưu hóa thời gian liên kết, chẳng hạn như "Định cấu hình
-Doptimize='-O2 -flto'" không thành công do trình tối ưu hóa tối ưu hóa một số Cấu hình
các bài kiểm tra. Một cách giải quyết khác là bỏ cờ "-flto" khi chạy Cấu hình, nhưng thêm nó vào
quay lại trong khi thực sự đang xây dựng, đại loại như

sh Cấu hình -Doptimize=-O2
tạo TỐI ƯU HÓA='-O2 -flto'

· Các mô-đun CPAN sau đây có lỗi kiểm tra với Perl 5.16. Các bản vá đã được
đã gửi cho tất cả những thứ này, vì vậy hy vọng sẽ sớm có bản phát hành mới:

· Ngày::Pcalc phiên bản 6.1

· Mô-đun::CPANTS::Phân tích phiên bản 0.85

Điều này không thành công do sự cố trong Mô-đun::Tìm 0.10 và Tệp::MMagic 1.27.

· PerlIO::Util phiên bản 0.72

Lời cảm ơn


Perl 5.16.0 đại diện cho khoảng 12 tháng phát triển kể từ Perl 5.14.0 và
chứa khoảng 590,000 dòng thay đổi trên 2,500 tệp từ 139 tác giả.

Perl tiếp tục phát triển trong thập kỷ thứ ba nhờ vào một cộng đồng người dùng sôi động
và các nhà phát triển. Những người sau đây được biết là đã đóng góp những cải tiến
đã trở thành Perl 5.16.0:

Aaron Crane, Abhijit Menon-Sen, Abigail, Alan Haggai Alavi, Alberto Simo~es, Alexandr
Ciornii, Andreas Koenig, Andy Dougherty, Aristotle Pagaltzis, Bo Johansson, Bo Lindbergh,
Breno G. de Oliveira, brian d foy, Brian Fraser, Brian Greenfield, Carl Hayter, Chas.
Owens, Chia-liang Kao, Chip Salzenberg, Chris 'BinGOs' Williams, Christian Hansen,
Christopher J. Madsen, chromatic, Claes Jacobsson, Claudio Ramirez, Craig A. Berry, Damian
Conway, Daniel Kahn Gillmor, Darin McBride, Dave Rolsky, David Cantrell, David Golden,
David Leadbeater, David Mitchell, Dee Newcum, Dennis Kaarsemaker, Dominic Hargreaves,
Douglas Christopher Wilson, Eric Brine, Cha Chrysostomos, Florian Ragwitz, Frederic
Briere, George Greer, Gerard Goossen, Gisle Aas, H.Merijn Brand, Hojung Youn, Ian
Goodacre, James E Keenan, Jan Dubois, Jerry D. Hedden, Jesse Luehrs, Jesse Vincent, Jilles
Tjoelker, Jim Cromie, Jim Meyering, Joel Berger, Johan Vromans, Johannes Plunien, John
Hawkinson, John P. Linderman, John Peacock, Joshua ben Jore, Juerd Waalboer, Karl
Williamson, Karthik Rajagopalan, Keith Thompson, Kevin J. Woolley, Kevin Ryde, Laurent
Dami, Leo Lapworth, Leon Brocard, Leon Timmermans, Louis Strous, Lukas Mai, Marc Green,
Marcel Gruenauer, Mark A. Stratman, Mark Dootson, Mark Jason Dominus, Martin Hasch,
Matthew Horsfall,Max Maischein,Michael G Schwern,Michael Witten,Mike Sheldrake,Moritz
Lenz, Nicholas Clark, Niko Tyni, Nuno Carvalho, Pau Amma, Paul Evans, Paul Green, Paul
Johnson, Perlover, Peter John Acklam, Peter Martini, Peter Scott, Phil Monsen, Pino
Toscano, Rafael Garcia-Suarez, Rainer Tammer, Reini Urban, Ricardo Signes, Robin Barker,
Rodolfo Carvalho, Salvador Fandin~o, Sam Kimbrel, Samuel Thibault, Shawn M Moore, Shigeya
Suzuki, Shirakata Kentaro, Cá Shlomi, Sisyphus, Slaven Rezic, Spiros Denaxas, Steffen
Mueller, Steffen Schwigon, Stephen Bennett, Stephen Oberholtzer, Stevan Little, Steve Hay,
Steve Peters, Thomas Sibley, Thorsten Glaser, Timothe Litt, Todd Rinaldo, Tom
Christiansen,Tom Hukins,Tony Cook,Vadim Konovalov,Vincent Pit,Vladimir Timofeev,Walt
Mankowski, Yves Orton, Zefram, Zsban Ambrus, AEvar Arnfjoer` Bjarmason.

Danh sách trên gần như chắc chắn không đầy đủ vì nó được tạo tự động từ
lịch sử kiểm soát phiên bản. Đặc biệt, nó không bao gồm tên của (rất nhiều
đánh giá cao) những người đóng góp đã báo cáo sự cố cho trình theo dõi lỗi Perl.

Nhiều thay đổi có trong phiên bản này bắt nguồn từ các mô-đun CPAN có trong
Cốt lõi của Perl. Chúng tôi biết ơn toàn thể cộng đồng CPAN đã giúp Perl phát triển.

Để có danh sách đầy đủ hơn về tất cả những người đóng góp lịch sử của Perl, vui lòng xem TÁC GIẢ
trong bản phân phối nguồn Perl.

Báo cáo Lỗi


Nếu bạn tìm thấy những gì bạn cho là lỗi, bạn có thể kiểm tra các bài báo được đăng gần đây lên
nhóm tin comp.lang.perl.misc và cơ sở dữ liệu lỗi perl tạihttp://rt.perl.org/perlbug/>.
Cũng có thể có thông tin tạihttp://www.perl.org/>, Trang chủ Perl.

Nếu bạn cho rằng mình gặp lỗi chưa được báo cáo, hãy chạy chương trình perlbug đi kèm với
bản phát hành của bạn. Hãy chắc chắn cắt lỗi của bạn xuống một trường hợp thử nghiệm nhỏ nhưng đủ. Lỗi của bạn
báo cáo, cùng với đầu ra của "perl -V", sẽ được gửi đến [email được bảo vệ] được
được phân tích bởi nhóm porting Perl.

Nếu lỗi bạn đang báo cáo có liên quan đến bảo mật, khiến nó không phù hợp với
gửi đến danh sách gửi thư được lưu trữ công khai, sau đó vui lòng gửi đến
[email được bảo vệ]. Điều này chỉ ra một đăng ký đã đóng gửi thư không lưu trữ
danh sách, bao gồm tất cả những người cam kết cốt lõi, những người sẽ có thể giúp đánh giá tác động của
các vấn đề, tìm ra giải pháp và giúp phối hợp phát hành các bản vá để giảm thiểu
hoặc khắc phục sự cố trên tất cả các nền tảng mà Perl được hỗ trợ. Hãy sử dụng cái này
chỉ giải quyết các vấn đề bảo mật trong lõi Perl, không dành cho các mô-đun độc lập
được phân phối trên CPAN.

Sử dụng perl5160delta trực tuyến bằng các dịch vụ onworks.net


Máy chủ & Máy trạm miễn phí

Tải xuống ứng dụng Windows & Linux

  • 1
    Nguyên tử
    Nguyên tử
    Atom là một trình soạn thảo văn bản
    hiện đại, dễ tiếp cận và đầy đủ tính năng.
    Nó cũng có thể dễ dàng tùy chỉnh- bạn
    có thể tùy chỉnh nó để làm bất cứ điều gì và
    có thể ...
    Tải xuống nguyên tử
  • 2
    Osu!
    Osu!
    Osu! là một trò chơi nhịp điệu đơn giản với một cái giếng
    nghĩ ra đường cong học tập cho người chơi
    của tất cả các cấp độ kỹ năng. Một trong những tuyệt vời
    các khía cạnh của Osu! là nó là
    cộng đồng-dr ...
    Tải xuống Osu!
  • 3
    LIBPNG: thư viện tham khảo PNG
    LIBPNG: thư viện tham khảo PNG
    Thư viện tài liệu tham khảo để hỗ trợ các
    Định dạng đồ họa mạng di động (PNG).
    Đối tượng: Nhà phát triển. Lập trình
    Ngôn ngữ: C. Đây là một ứng dụng
    cũng có thể...
    Tải xuống LIBPNG: Thư viện tham khảo PNG
  • 4
    Máy dò kim loại dựa trên RP2040
    Máy dò kim loại dựa trên RP2040
    Dựa trên bảng Raspberry Pi Pico, điều này
    máy dò kim loại được bao gồm trong xung
    loại máy dò kim loại cảm ứng, với
    những thuận lợi và khó khăn được biết đến.
    RP ...
    Tải xuống máy dò kim loại dựa trên RP2040
  • 5
    Quản lý PAC
    Quản lý PAC
    PAC là sự thay thế Perl / GTK cho
    SecureCRT/Putty/vv (linux
    ssh/telnet/... gui)... Nó cung cấp một GUI
    để định cấu hình kết nối: người dùng,
    mật khẩu, quy định EXPECT...
    Tải xuống Trình quản lý PAC
  • 6
    GeoServer
    GeoServer
    GeoServer là một phần mềm mã nguồn mở
    máy chủ được viết bằng Java cho phép người dùng
    để chia sẻ và chỉnh sửa dữ liệu không gian địa lý.
    Được thiết kế cho khả năng tương tác, nó
    xuất bản da ...
    Tải xuống GeoServer
  • Khác »

Lệnh Linux

Ad