Đây là lệnh perl5180delta 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
perl5180delta - có gì mới cho perl v5.18.0
MÔ TẢ
Tài liệu này mô tả sự khác biệt giữa bản phát hành v5.16.0 và bản phát hành v5.18.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ư v5.14.0, trước tiên hãy đọc perl5160delta,
trong đó mô tả sự khác biệt giữa v5.14.0 và v5.16.0.
Trung tâm Cải tiến
Mới cơ chế cho thử nghiệm Tính năng, đặc điểm
Các tính năng thử nghiệm mới được thêm vào giờ đây sẽ yêu cầu câu chú thích sau:
không có cảnh báo "thử nghiệm :: tính năng_tên";
sử dụng tính năng "feature_name"; # sẽ cảnh báo nếu không có dòng trước
Có một danh mục cảnh báo mới, được gọi là "thử nghiệm", chứa các cảnh báo rằng
tính năng pragma phát ra khi bật các tính năng thử nghiệm.
Các tính năng thử nghiệm mới được thêm vào cũng sẽ được cung cấp các ID cảnh báo đặc biệt, bao gồm
"thử nghiệm ::" theo sau là tên của đối tượng địa lý. (Kế hoạch là để mở rộng điều này
cơ chế cuối cùng cho tất cả các cảnh báo, để cho phép chúng được bật hoặc tắt
riêng lẻ, và không chỉ theo danh mục.)
Bằng cách nói
không có cảnh báo "thử nghiệm :: tính năng_tên";
bạn chịu trách nhiệm về bất kỳ sự cố nào mà trong tương lai sẽ thay đổi hoặc loại bỏ
tính năng có thể gây ra.
Vì một số tính năng (như "~~" hoặc "my $ _") hiện phát ra cảnh báo thử nghiệm và bạn có thể
muốn vô hiệu hóa chúng trong mã cũng được chạy trên các perls không nhận ra những cảnh báo này
, hãy xem xét sử dụng pragma "nếu" như thế này:
không nếu $]> = 5.018, cảnh báo => "thử nghiệm :: tính năng_tên";
Các tính năng thử nghiệm hiện tại cũng có thể bắt đầu phát ra những cảnh báo này. Vui lòng tư vấn
perlexperiment để biết thông tin về những tính năng nào được coi là thử nghiệm.
Băm đại tu
Những thay đổi đối với việc triển khai hàm băm trong perl v5.18.0 sẽ là một trong những thay đổi dễ thấy nhất
thay đổi hành vi của mã hiện có.
Theo mặc định, hai biến băm riêng biệt có khóa và giá trị giống hệt nhau hiện có thể cung cấp
nội dung của chúng theo một thứ tự khác mà trước đây nó giống hệt nhau.
Khi gặp những thay đổi này, chìa khóa để làm sạch chúng là chấp nhận rằng băm
đang không có thứ tự bộ sưu tập và hành động phù hợp.
Băm ngẫu nhiên
Hạt giống được sử dụng bởi hàm băm của Perl bây giờ là ngẫu nhiên. Điều này có nghĩa là thứ tự
các khóa / giá trị sẽ được trả về từ các hàm như "khóa ()", "giá trị ()" và "mỗi ()" sẽ
khác với chạy để chạy.
Thay đổi này được giới thiệu để làm cho các băm của Perl mạnh mẽ hơn đối với độ phức tạp của thuật toán
và cũng bởi vì chúng tôi phát hiện ra rằng nó làm lộ ra các lỗi phụ thuộc thứ tự băm và
giúp chúng dễ dàng theo dõi hơn.
Những người bảo trì chuỗi công cụ có thể muốn đầu tư vào cơ sở hạ tầng bổ sung để kiểm tra mọi thứ
như thế này. Chạy các bài kiểm tra nhiều lần liên tiếp và sau đó so sánh kết quả sẽ làm cho nó
dễ dàng hơn để phát hiện các phụ thuộc thứ tự băm trong mã. Các tác giả được khuyến khích không
tiết lộ thứ tự chính của hàm băm của Perl cho những khán giả không an toàn.
Hơn nữa, mỗi hàm băm đều có thứ tự lặp lại của riêng nó, điều này sẽ khiến nó trở nên khó khăn hơn nhiều
để xác định hạt băm hiện tại là gì.
Mới băm chức năng
Perl v5.18 bao gồm hỗ trợ cho nhiều hàm băm và đã thay đổi giá trị mặc định (thành
ONE_AT_A_TIME_HARD), bạn có thể chọn một thuật toán khác bằng cách xác định một ký hiệu khi biên dịch
thời gian. Để có danh sách hiện tại, hãy tham khảo INSTALL tài liệu. Lưu ý rằng kể từ Perl v5.18, chúng tôi
chỉ có thể khuyến nghị sử dụng mặc định hoặc SIPHASH. Tất cả những người khác được biết là có
vấn đề bảo mật và chỉ dành cho mục đích nghiên cứu.
PERL_HASH_SEED môi trường biến tại mất a hex giá trị
"PERL_HASH_SEED" không còn chấp nhận một số nguyên làm tham số; thay vào đó giá trị là
được mong đợi là một giá trị nhị phân được mã hóa trong một chuỗi hex, chẳng hạn như "0xf5867c55039dc724". Điều này
là làm cho các hạt băm hỗ trợ cơ sở hạ tầng có độ dài tùy ý, có thể vượt quá
của một số nguyên. (SipHash sử dụng một hạt giống 16 byte.)
PERL_PERTURB_KEYS môi trường biến thêm
Biến môi trường "PERL_PERTURB_KEYS" cho phép một người kiểm soát mức
ngẫu nhiên được áp dụng cho "chìa khóa" và bạn bè.
Khi "PERL_PERTURB_KEYS" bằng 0, perl sẽ không ngẫu nhiên hóa thứ tự khóa. Cơ hội
rằng "các phím" thay đổi do chèn sẽ giống như trong các đặc quyền trước đó, về cơ bản chỉ
khi kích thước thùng được thay đổi.
Khi "PERL_PERTURB_KEYS" là 1, perl sẽ ngẫu nhiên hóa các khóa theo cách không thể lặp lại. Các
khả năng "các phím" thay đổi do chèn sẽ rất cao. Điều này là an toàn nhất
và chế độ mặc định.
Khi "PERL_PERTURB_KEYS" là 2, perl sẽ ngẫu nhiên hóa các khóa theo cách có thể lặp lại. Lặp đi lặp lại
chạy cùng một chương trình nên tạo ra cùng một đầu ra mỗi lần.
"PERL_HASH_SEED" ngụ ý cài đặt "PERL_PERTURB_KEYS" không phải mặc định. Thiết lập
"PERL_HASH_SEED = 0" (chính xác là một 0) ngụ ý "PERL_PERTURB_KEYS = 0" (ngẫu nhiên hóa khóa băm
tàn tật); đặt "PERL_HASH_SEED" thành bất kỳ giá trị nào khác ngụ ý "PERL_PERTURB_KEYS = 2"
(ngẫu nhiên hóa khóa băm xác định và lặp lại). Chỉ định "PERL_PERTURB_KEYS"
rõ ràng ở một cấp độ khác sẽ ghi đè hành vi này.
Hash :: Util :: hash_seed () tại Trả về a chuỗi
Hash :: Util :: hash_seed () bây giờ trả về một chuỗi thay vì một số nguyên. Điều này là để làm cho
hạt băm hỗ trợ cơ sở hạ tầng có độ dài tùy ý có thể vượt quá
số nguyên. (SipHash sử dụng một hạt giống 16 byte.)
Đầu ra of PERL_HASH_SEED_DEBUG có được thay đổi
Biến môi trường PERL_HASH_SEED_DEBUG hiện làm cho perl hiển thị cả hàm băm
perl được xây dựng với, và hạt giống, ở dạng hex, được sử dụng cho quá trình đó. Mã phân tích cú pháp này
đầu ra, nếu nó tồn tại, phải thay đổi để phù hợp với định dạng mới. Ví dụ về cái mới
định dạng:
$ PERL_HASH_SEED_DEBUG = 1 ./perl -e1
HASH_FUNCTION = MURMUR3 HASH_SEED = 0x1476bb9f
Upgrade đến Unicode 6.2
Perl hiện hỗ trợ Unicode 6.2. Danh sách các thay đổi từ Unicode 6.1 có tại
<http://www.unicode.org/versions/Unicode6.2.0>.
Nhân vật tên bí danh có thể tại bao gồm không-Latinh1-phạm vi nhân vật
Có thể xác định tên riêng của bạn cho các ký tự để sử dụng trong "\ N {...}",
"charnames :: vianame ()", v.v. Những tên này hiện có thể bao gồm các ký tự từ
toàn bộ dãy Unicode. Điều này cho phép tên bằng ngôn ngữ mẹ đẻ của bạn chứ không chỉ
Tiếng Anh. Một số hạn chế nhất định áp dụng cho các ký tự có thể được sử dụng (bạn không thể xác định
chẳng hạn như tên có dấu chấm câu). Xem "TÙY CHỈNH ALIASES" trong các tên gọi.
Mới DTrace tàu thăm dò
Các đầu dò DTrace mới sau đây đã được thêm vào:
· "Op-entry"
· "Đang tải tập tin"
· "Tệp đã tải"
"$ {^ LAST_FH}"
Biến mới này cung cấp quyền truy cập vào tệp xử lý được đọc lần cuối. Đây là
xử lý được sử dụng bởi $. và bằng "tell" và "eof" mà không có đối số.
Đều đặn Biểu hiện Thiết lập Hoạt động
Đây là một thử nghiệm tính năng cho phép đối sánh với liên hiệp, giao điểm, v.v.,
tập hợp các điểm mã, tương tự như Unicode :: Regex :: Set. Nó cũng có thể được sử dụng để mở rộng
Xử lý "/ x" thành các lớp ký tự [được đặt trong ngoặc vuông] và thay thế các lớp ký tự do người dùng xác định
các thuộc tính, cho phép các biểu thức phức tạp hơn chúng. Xem "Được mở rộng trong ngoặc vuông
Các lớp nhân vật "trong perlrecharclass.
từ vựng chương trình con
Tính năng mới này vẫn được coi là thử nghiệm. Để kích hoạt nó:
sử dụng 5.018;
không có cảnh báo "thử nghiệm :: lexical_subs";
sử dụng tính năng "lexical_subs";
Bây giờ bạn có thể khai báo các chương trình con với "state sub foo", "my sub foo" và "our sub foo".
("tiểu bang" yêu cầu bật tính năng "tiểu bang", trừ khi bạn viết nó là
"CORE :: state sub foo".)
"state sub" tạo ra một chương trình con có thể nhìn thấy trong phạm vi từ vựng mà nó được khai báo.
Chương trình con được chia sẻ giữa các cuộc gọi đến chương trình con bên ngoài.
"my sub" khai báo một chương trình con từ vựng được tạo mỗi khi khối bao quanh là
đã nhập. "tiểu bang" nói chung là nhanh hơn một chút so với "tiểu của tôi".
"our sub" khai báo một bí danh từ vựng cho chương trình con gói cùng tên.
Để biết thêm thông tin, hãy xem "Lexical Subroutines" trong perlsub.
Tính Nhãn
Vòng lặp điều khiển "tiếp theo", "cuối cùng" và "làm lại" và toán tử "kết xuất" đặc biệt, hiện cho phép
biểu thức tùy ý được sử dụng để tính toán các nhãn tại thời điểm chạy. Trước đây, bất kỳ đối số nào
đó không phải là một hằng số được coi là một chuỗi rỗng.
Xem thêm CỐT LÕI:: phụ
Một số hàm tích hợp khác đã được thêm vào dưới dạng chương trình con vào CORE :: namespace -
cụ thể là những từ khóa không thể ghi đè có thể được triển khai mà không có trình phân tích cú pháp tùy chỉnh:
"xác định", "xóa", "tồn tại", "hình cầu", "pos", "nguyên mẫu", "vô hướng", "tách", "nghiên cứu" và
"undef".
Vì một số trong số này có nguyên mẫu, "nguyên mẫu ('CORE :: ...')" đã được thay đổi để không tạo ra
phân biệt giữa từ khóa có thể ghi đè và không thể ghi đè. Đây là để làm cho
"nguyên mẫu ('CORE :: pos')" nhất quán với "nguyên mẫu (& CORE :: pos)".
"giết" với tiêu cực tín hiệu tên
"kill" luôn cho phép một số tín hiệu âm, thay vào đó, nó sẽ giết chết nhóm quy trình
của một quy trình duy nhất. Nó cũng đã cho phép các tên tín hiệu. Nhưng nó đã không hoạt động
nhất quán, bởi vì tên tín hiệu tiêu cực được coi là 0. Giờ đây, tên tín hiệu tiêu cực
như "-INT" được hỗ trợ và xử lý giống như -2 [perl # 112990].
Bảo mật
Xem cũng: băm đại tu
Một số thay đổi trong quá trình đại tu mã băm đã được thực hiện để tăng cường bảo mật. Hãy đọc nó
phần.
"Đáng yêu" an ninh cảnh báo in tài liệu hướng dẫn
Tài liệu về "Stocking" hiện bao gồm một phần cảnh báo người đọc về mối nguy hiểm
chấp nhận các tài liệu lưu trữ từ các nguồn không đáng tin cậy. Phiên bản ngắn gọn là
deserializing một số loại dữ liệu có thể dẫn đến tải mô-đun và thực thi mã khác.
Đây là hành vi được ghi lại và hành vi truy nã, nhưng điều này mở ra một vectơ tấn công cho
các thực thể độc hại.
"Ngôn ngữ :: Maketext" cho phép mã tiêm thông qua a độc hại mẫu
Nếu người dùng có thể cung cấp một chuỗi dịch sang Ngôn ngữ :: Maketext, thì điều này có thể được sử dụng để
gọi các chương trình con Perl tùy ý có sẵn trong quy trình hiện tại.
Điều này đã được khắc phục, nhưng vẫn có thể gọi bất kỳ phương thức nào được cung cấp bởi
Bản thân "Locale :: Maketext" hoặc một lớp con mà bạn đang sử dụng. Một trong những phương pháp này lần lượt
sẽ gọi chương trình con "sprintf" của lõi Perl.
Tóm lại, việc cho phép người dùng cung cấp các chuỗi dịch mà không cần kiểm tra chúng là một điều tồi tệ
ý kiến.
Lỗ hổng này được ghi lại trong CVE-2012-6329.
Tránh gọi bộ ghi nhớ với a tiêu cực tính
Mã perl được viết kém cho phép kẻ tấn công chỉ định số lượng cho chuỗi "x" của perl
toán tử lặp lại đã có thể gây ra một cuộc tấn công từ chối dịch vụ cạn kiệt bộ nhớ. Một lỗ hổng trong
các phiên bản của perl trước v5.15.5 có thể chuyển nó thành tràn bộ đệm heap; đã cặp đôi với
các phiên bản của glibc trước 2.16, nó có thể cho phép thực thi mã tùy ý.
Lỗ hổng được giải quyết cho cam kết này đã được chỉ định số nhận dạng CVE-2012-5195 và được
do Tim Brown nghiên cứu.
Không tương thích Những thay đổi
Xem cũng: băm đại tu
Một số thay đổi trong đại tu băm không hoàn toàn tương thích với các phiên bản trước
của perl. Hãy đọc phần đó.
An không xác định tính cách tên in "\N{...}" is tại a cú pháp lôi
Trước đây, nó đã cảnh báo và KÝ TỰ THAY THẾ Unicode đã được thay thế. Unicode bây giờ
khuyến cáo rằng tình huống này là một lỗi cú pháp. Ngoài ra, hành vi trước đó đã dẫn đến một số
các cảnh báo và hành vi gây nhầm lẫn và vì NHÂN VẬT THAY THẾ không có công dụng nào khác
chứ không phải là dự phòng cho một số ký tự không xác định, bất kỳ mã nào gặp sự cố này đều có lỗi.
Trước kia phản đối nhân vật in "\N{}" tính cách tên bí danh đang tại lỗi.
Kể từ v5.12.0, việc sử dụng các ký tự nhất định trong "\ N {...}" do người dùng xác định đã không được chấp nhận nữa
tên nhân vật. Những điều này hiện gây ra lỗi cú pháp. Ví dụ, bây giờ là lỗi đối với
bắt đầu tên bằng một chữ số, chẳng hạn như trong
my $ undraftable = "\ N {4F}"; # Lỗi cú pháp!
hoặc có dấu phẩy ở bất kỳ đâu trong tên. Xem "TÙY CHỈNH ALIASES" trong các tên.
"\ N {BELL}" tại đề cập đến U + 1F514 thay vì of U + 0007
Unicode 6.0 đã sử dụng lại tên "BELL" cho một điểm mã khác với điểm mã truyền thống
có nghĩa là. Kể từ Perl v5.14, việc sử dụng tên này vẫn được gọi là U + 0007, nhưng sẽ tăng
cảnh báo không dùng nữa. Bây giờ, "BELL" đề cập đến U + 1F514 và tên của U + 0007 là "ALERT".
Tất cả các chức năng trong charnames đã được cập nhật tương ứng.
Mới Hạn chế in Đa ký tự Trường hợp không nhạy cảm Phù hợp in Đều đặn Biểu hiện Được đánh dấu ngoặc
Nhân vật Các lớp học
Unicode hiện đã rút lại đề xuất trước đó của họ cho các cụm từ thông dụng để
tự động xử lý các trường hợp trong đó một ký tự có thể khớp với nhiều ký tự, trường hợp-
một cách thiếu tế nhị, ví dụ, chữ cái LATIN SMALL LETTER SHARP S và chuỗi "ss".
Điều này là do hóa ra là không thể thực hiện được điều này một cách chính xác trong tất cả
trường hợp. Vì Perl đã cố gắng làm điều này tốt nhất có thể, nó sẽ tiếp tục làm
Vì thế. (Chúng tôi đang xem xét một tùy chọn để tắt tính năng này.) Tuy nhiên, một hạn chế mới đang được
được thêm vào các trận đấu như vậy khi chúng xuất hiện trong các lớp ký tự [được đặt trong ngoặc vuông]. Mọi người đã
chỉ định những thứ chẳng hạn như "/ [\ 0- \ xff] / i" và ngạc nhiên rằng nó khớp với cả hai
dãy ký tự "ss" (vì CHIA SẺ CHỮ NHỎ LATIN S xuất hiện trong phạm vi này). Điều này
hành vi cũng không phù hợp với việc sử dụng thuộc tính thay vì phạm vi:
"\ p {Block = Latin1}" cũng bao gồm CHỮ CÁI NHỎ LATIN S, nhưng "/ [\ p {Block = Latin1}] / i"
không khớp với "ss". Quy tắc mới là để có một trường hợp nhiều ký tự-
đối sánh không nhạy cảm trong một lớp ký tự được đặt trong ngoặc, ký tự phải rõ ràng
được liệt kê và không phải là điểm cuối của một dải ô. Điều này tuân thủ chặt chẽ hơn Nguyên tắc
Ít kinh ngạc nhất. Xem "Lớp ký tự được đánh dấu ngoặc" trong perlrecharclass. Lưu ý rằng một
lỗi [perl # 89774], hiện đã được sửa như một phần của thay đổi này, đã ngăn chặn hành vi trước đó
hoạt động đầy đủ.
Rõ ràng quy tắc cho biến tên và định danh
Do sơ suất, các tên biến ký tự đơn trong v5.16 đã hoàn toàn
không bị hạn chế. Điều này đã mở đầu cho một số loại điên rồ. Kể từ v5.18, bây giờ
tuân theo các quy tắc của các số nhận dạng khác, ngoài việc chấp nhận các ký tự khớp với
Thuộc tính "\ p {POSIX_Punct}".
Không còn bất kỳ sự khác biệt nào trong việc phân tích cú pháp của các số nhận dạng được chỉ định bằng cách sử dụng dấu ngoặc nhọn
so với không niềng răng. Ví dụ: perl được sử dụng để cho phép "$ {foo: bar}" (với một
dấu hai chấm) nhưng không phải $ foo: bar. Bây giờ cả hai đều được xử lý bởi một đường dẫn mã duy nhất, cả hai đều
đối xử như nhau: cả hai đều bị cấm. Lưu ý rằng thay đổi này là về phạm vi của
các định danh theo nghĩa đen được phép, không phải các biểu thức khác.
Theo chiều dọc tab đang tại khoảng trắng
Không ai có thể nhớ tại sao "\ s" không khớp với "\ cK", tab dọc. Bây giờ nó làm. Được
độ hiếm cực kỳ của ký tự đó, rất ít bị vỡ mong đợi. Điều đó nói rằng, đây là
nó có nghĩa là gì:
"\ s" trong regex hiện khớp với tab dọc trong mọi trường hợp.
Các tab dọc theo nghĩa đen trong một ký tự regex bị bỏ qua khi sử dụng công cụ sửa đổi "/ x".
Các tab dọc hàng đầu, một mình hoặc trộn lẫn với các khoảng trắng khác, hiện bị bỏ qua khi
diễn giải một chuỗi dưới dạng một số. Ví dụ:
$ dec = "\ cK \ t 123";
$ hex = "\ cK \ t 0xF";
nói 0 + $ dec; # là 0 với cảnh báo, bây giờ là 123
nói int $ dec; # là 0, bây giờ là 123
nói oct $ hex; # là 0, bây giờ là 15
"/ (? {}) /" và "/ (?? {}) /" có được nặng nề làm lại
Việc triển khai tính năng này gần như đã được viết lại hoàn toàn. Mặc dù nó
mục đích chính là sửa lỗi, một số hành vi, đặc biệt là liên quan đến phạm vi từ vựng
các biến, sẽ thay đổi. Điều này được mô tả đầy đủ hơn trong "Bản sửa lỗi đã chọn"
phần.
Nghiêm khắc hơn phân tích cú pháp of thay thế thay thế
Không còn có thể lạm dụng cách trình phân tích cú pháp "s /// e" như thế này:
% _ = (_, "Chỉ khác");
$ _ = "Tin tặc Perl, \ n";
s // _} -> {_ / e; print
"được" tại bí danh các toàn cầu $_
Thay vì gán cho $ _ từ vựng ngầm định, "đã cho" hiện đặt $ _ toàn cục thành một bí danh
đối với đối số của nó, giống như "foreach". Tuy nhiên, nó vẫn sử dụng từ vựng $ _ nếu có
từ vựng $ _ trong phạm vi (một lần nữa, giống như "foreach") [perl # 114020].
Sản phẩm trận đấu thông minh gia đình of Tính năng, đặc điểm đang tại thử nghiệm
Kết hợp thông minh, được thêm vào v5.10.0 và được sửa đổi đáng kể trong v5.10.1, đã trở thành một
điểm khiếu nại. Mặc dù có một số cách hữu ích, nhưng nó có
cũng được chứng minh là có vấn đề và gây nhầm lẫn cho cả người dùng và người triển khai Perl. Ở đây có
là một số đề xuất về cách giải quyết vấn đề tốt nhất. Rõ ràng là
smartmatch gần như chắc chắn sẽ thay đổi hoặc biến mất trong tương lai. Dựa vào
về hành vi hiện tại của nó không được khuyến khích.
Giờ đây, cảnh báo sẽ được đưa ra khi trình phân tích cú pháp nhìn thấy "~~", "đã cho" hoặc "khi nào". Để vô hiệu hóa
những cảnh báo này, bạn có thể thêm dòng này vào phạm vi thích hợp:
không nếu $]> = 5.018, cảnh báo => "thử nghiệm :: smartmatch";
Tuy nhiên, hãy xem xét việc thay thế việc sử dụng các tính năng này, vì chúng có thể thay đổi lại hành vi
trước khi trở nên ổn định.
từ vựng $_ is tại thử nghiệm
Kể từ khi nó được giới thiệu trong Perl v5.10, nó đã gây ra nhiều sự nhầm lẫn mà không rõ ràng
dung dịch:
· Nhiều mô-đun khác nhau (ví dụ: List :: Util) mong đợi các quy trình gọi lại sử dụng $ _ chung.
"use List :: Util 'first'; my $ _; first {$ _ == 1} @list" không hoạt động như
chờ đợi.
· Khai báo "my $ _" trước đó trong cùng một tệp có thể gây ra cảnh báo đóng khó hiểu.
· Ký tự nguyên mẫu của chương trình con "_" cho phép các chương trình con được gọi truy cập vào
từ vựng $ _, vì vậy xét cho cùng thì nó không thực sự là riêng tư.
· Tuy nhiên, các chương trình con có nguyên mẫu và phương thức "(@)" không thể truy cập vào
từ vựng của người gọi $ _, trừ khi chúng được viết bằng XS.
· Nhưng ngay cả các quy trình XS cũng không thể truy cập $ _ từ vựng được khai báo, không có trong lệnh gọi
chương trình con, nhưng trong phạm vi bên ngoài, chương trình con đó đã xảy ra không đề cập đến $ _ hoặc
sử dụng bất kỳ toán tử nào mặc định là $ _.
Chúng tôi hy vọng rằng $ _ từ vựng có thể được phục hồi, nhưng điều này có thể gây ra những thay đổi trong
hành vi. Vui lòng sử dụng nó một cách thận trọng cho đến khi nó trở nên ổn định.
readline () với "$ / = \N" tại đọc N nhân vật, không N byte
Trước đây, khi đọc từ một luồng có các lớp I / O, chẳng hạn như "mã hóa", readline ()
hàm, còn được gọi là toán tử "<>", sẽ đọc N byte từ trên cùng
lớp. [perl # 79960]
Bây giờ, N các ký tự được đọc thay thế.
Không có thay đổi về hành vi khi đọc từ các luồng không có lớp bổ sung, vì
byte ánh xạ chính xác đến các ký tự.
Bị ghi đè "quả cầu" is tại thông qua một đối số
ghi đè "cầu" từng được thông qua đối số thứ hai kỳ diệu không có tài liệu xác định
người gọi. Không có gì trên CPAN đang sử dụng cái này và nó đang gặp khó khăn trong việc sửa lỗi, vì vậy nó
loại bỏ. Nếu bạn thực sự cần xác định người gọi, hãy xem Devel :: Callsite trên CPAN.
Đây doc phân tích cú pháp
Nội dung của một tài liệu tại đây bên trong một toán tử giống như dấu ngoặc kép bây giờ luôn bắt đầu trên dòng
sau dấu "<
toán tử giống như dấu ngoặc kép có chứa, nhưng đó chỉ là trường hợp đôi khi [perl # 114040].
Chữ và số khai thác phải tại be ly thân từ các đóng cửa dấu phân cách of đều đặn biểu thức
Bạn có thể không còn viết một cái gì đó như:
m / a / và 1
Thay vào đó bạn phải viết
m / a / và 1
với khoảng trắng ngăn cách toán tử khỏi dấu phân cách đóng của
biểu hiện. Không có khoảng trắng đã dẫn đến cảnh báo không dùng nữa kể từ Perl
v5.14.0.
qw (...) có thể Không còn be đã sử dụng as dấu ngoặc đơn
danh sách "qw" được sử dụng để đánh lừa trình phân tích cú pháp nghĩ rằng chúng luôn bị bao quanh bởi
dấu ngoặc đơn. Điều này cho phép một số cấu trúc đáng ngạc nhiên như "foreach $ x qw (abc)
{...} ", thực sự phải được viết là" foreach $ x (qw (abc)) {...} ". Đây sẽ là
đôi khi làm cho lexer ở trạng thái sai, vì vậy chúng không hoạt động hoàn toàn và tương tự
"foreach qw (abc) {...}" mà người ta có thể mong đợi được phép không bao giờ hoạt động.
Tác dụng phụ này của "qw" hiện đã được bãi bỏ. Nó đã không được dùng nữa kể từ Perl
v5.13.11. Bây giờ cần phải sử dụng dấu ngoặc đơn thực ở mọi nơi mà ngữ pháp gọi
cho họ.
Tương tác of từ vựng và mặc định cảnh báo
Bật bất kỳ cảnh báo từ vựng nào được sử dụng trước để tắt tất cả các cảnh báo mặc định nếu từ vựng
cảnh báo chưa được bật:
$ *; # cảnh báo không dùng nữa
sử dụng cảnh báo "void";
$ #; # cảnh báo vô hiệu; không có cảnh báo không dùng nữa
Giờ đây, các danh mục cảnh báo "đang gỡ lỗi", "không được dùng nữa", "hình cầu", "tại chỗ" và "malloc" là
được bật khi bật cảnh báo từ vựng (trừ khi chúng bị tắt bởi "không có cảnh báo", trong số
khóa học).
Điều này có thể khiến cảnh báo không dùng nữa xảy ra trong mã đã từng không có cảnh báo.
Đó là những danh mục duy nhất chỉ bao gồm các cảnh báo mặc định. Cảnh báo mặc định trong
các danh mục khác vẫn bị vô hiệu hóa bởi danh mục "cảnh báo sử dụng" "", vì chúng tôi chưa có
cơ sở hạ tầng để kiểm soát các cảnh báo riêng lẻ.
"tiểu bang phụ " và "của chúng tôi phụ "
Do một tai nạn của lịch sử, "tiểu bang" và "tiểu bang của chúng tôi" tương đương với một "tiểu" đơn thuần,
vì vậy người ta thậm chí có thể tạo một phụ ẩn danh với "phụ của chúng tôi {...}". Đây là bây giờ
không được phép bên ngoài tính năng "lexical_subs". Trong tính năng "lexical_subs", họ
có nghĩa mới được mô tả trong "Lexical Subroutines" trong perlsub.
Xác định giá trị lưu trữ in môi trường đang buộc đến byte dây
Một giá trị được lưu trữ trong một biến môi trường luôn được chuỗi khi được kế thừa bởi
quy trình con.
Trong bản phát hành này, khi gán cho% ENV, các giá trị ngay lập tức được xâu chuỗi và chuyển đổi
chỉ là một chuỗi byte.
Đầu tiên, nó buộc phải là một chuỗi duy nhất. Sau đó, nếu chuỗi là utf8 và tương đương
của "utf8 :: downgrade ()" hoạt động, kết quả đó được sử dụng; nếu không, tương đương với
"utf8 :: encode ()" được sử dụng và cảnh báo được đưa ra về các ký tự rộng ("Chẩn đoán").
"yêu cầu" chết cho không đọc được các tập tin
Khi "request" gặp phải một tệp không thể đọc được, nó sẽ chết. Nó được sử dụng để bỏ qua tệp và
tiếp tục tìm kiếm các thư mục trong @INC [perl # 113422].
"gv_fetchmeth_ *" và SUPER
Các hàm XS "gv_fetchmeth_ *" khác nhau được sử dụng để xử lý một gói có tên kết thúc bằng
":: SUPER" đặc biệt. Tra cứu phương thức trên gói "Foo :: SUPER" sẽ được coi là
Tra cứu phương thức "SUPER" trên gói "Foo". Đây không còn là trường hợp. Để thực hiện một "SUPER"
tra cứu, vượt qua kho lưu trữ "Foo" và cờ "GV_SUPER".
"tách" của Thành phố điện khí hóa phía tây dãy núi Rocky đầu tiên đối số is chi tiết nhất quán giải thích
Sau một số thay đổi trước đó trong v5.17, hành vi của "split" đã được đơn giản hóa: nếu
Đối số PATTERN đánh giá thành một chuỗi chứa một khoảng trắng, nó được xử lý theo cách mà một
nghĩa đen chuỗi chứa một khoảng trắng đã từng là.
Không dùng nữa
Mô-đun sự loại bỏ
Các mô-đun sau sẽ bị xóa khỏi bản phân phối cốt lõi trong một bản phát hành trong tương lai và
tại thời điểm đó sẽ cần được cài đặt từ CPAN. Phân phối trên CPAN yêu cầu
các mô-đun này sẽ cần phải liệt kê chúng như là điều kiện tiên quyết.
Phiên bản cốt lõi của các mô-đun này hiện sẽ đưa ra cảnh báo danh mục "không được dùng nữa" để cảnh báo
bạn với thực tế này. Để tắt các cảnh báo không dùng nữa này, hãy cài đặt các mô-đun được đề cập
từ CPAN.
Lưu ý rằng đây là (với những ngoại lệ hiếm hoi) mà bạn được khuyến khích
tiếp tục sử dụng. Sự tách biệt của họ khỏi cốt lõi chủ yếu dựa vào sự cần thiết của họ để
khởi động cài đặt Perl có đầy đủ chức năng, có khả năng CPAN, thường không phải lo lắng
trên thiết kế của họ.
mã hóa
Việc sử dụng pragma này hiện không được khuyến khích. Nó cấu hình mã hóa của
văn bản nguồn với mã hóa dữ liệu I / O, diễn giải lại trình tự thoát trong nguồn
văn bản (một lựa chọn có vấn đề) và giới thiệu lỗi UTF-8 cho tất cả các xử lý thời gian chạy của
chuỗi ký tự. Nó bị hỏng như thiết kế và không thể sửa chữa.
Để sử dụng các ký tự chữ không phải ASCII trong văn bản nguồn, vui lòng tham khảo utf8. Vì
xử lý dữ liệu I / O dạng văn bản, vui lòng tham khảo Mã hóa và mở.
Lưu trữ :: Trích xuất
B :: Lint
B :: Lint :: Gỡ lỗi
CPANPLUS và tất cả các mô-đun "CPANPLUS :: *" được bao gồm
Devel :: InnerPackage
Nhật ký :: Tin nhắn
Nhật ký :: Tin nhắn :: Cấu hình
Nhật ký :: Tin nhắn :: Người xử lý
Nhật ký :: Tin nhắn :: Mục
Nhật ký :: Tin nhắn :: Đơn giản
Mô-đun :: Có thể lắp đặt
Mô-đun :: Có thể lắp đặt :: Đối tượng
Đối tượng :: Người truy cập
Pod :: LaTeX
Thuật ngữ :: Giao diện người dùng
Thuật ngữ :: Giao diện người dùng :: Lịch sử
Phản đối Tiện ích
Các tiện ích sau sẽ bị xóa khỏi bản phân phối cốt lõi trong một bản phát hành trong tương lai như
các mô-đun liên kết của chúng đã không còn được dùng nữa. Chúng sẽ vẫn có sẵn với
phân phối CPAN áp dụng.
cpanp
"cpanp-run-perl"
cpan2dist
Các mặt hàng này là một phần của phân phối "CPANPLUS".
pod2latex
Mục này là một phần của bản phân phối "Pod :: LaTeX".
PL_sv_objcount
Biến toàn cục-thông dịch này được sử dụng để theo dõi tổng số đối tượng Perl trong
thông dịch viên. Nó không còn được duy trì và sẽ bị xóa hoàn toàn trong Perl v5.20.
Số năm bổ sung nhân vật nên be trốn thoát in mô hình với "/ x"
Khi một mẫu biểu thức chính quy được biên dịch bằng "/ x", Perl coi 6 ký tự là màu trắng
không gian để bỏ qua, chẳng hạn như SPACE và TAB. Tuy nhiên, Unicode khuyến nghị 11 ký tự là
được đối xử như vậy. Chúng tôi sẽ tuân theo điều này trong một phiên bản Perl trong tương lai. Trong khi chờ đợi, hãy sử dụng
bất kỳ ký tự nào bị thiếu sẽ đưa ra cảnh báo không dùng nữa, trừ khi bị tắt. Các
năm ký tự là:
U + 0085 DÒNG TIẾP THEO
ĐÁNH DẤU TRÁI PHẢI CỦA U + 200E
ĐÁNH DẤU TRÁI PHẢI ĐẾN PHẢI U + 200F
BỘ CHẾ ĐỘ DÒNG U + 2028
U + 2029 PARAGRAPH SEPARATOR
Đã xác định người dùng tên gọi với thật ngạc nhiên khoảng trắng
Tên ký tự do người dùng xác định có dấu hoặc nhiều khoảng trắng trong một hàng có thể là lỗi đánh máy.
Điều này bây giờ tạo ra một cảnh báo khi được xác định, với giả định rằng việc sử dụng nó sẽ
không có khả năng bao gồm khoảng trắng dư thừa.
Thông báo sau XS-có thể gọi chức năng đang tại phản đối
Tất cả các chức năng được sử dụng để phân loại ký tự sẽ bị xóa khỏi phiên bản tương lai của
Perl, và không nên được sử dụng. Với các trình biên dịch C tham gia (ví dụ: gcc), biên dịch bất kỳ
tệp sử dụng bất kỳ tệp nào trong số này sẽ tạo ra cảnh báo. Những thứ này không dành cho công chúng
sử dụng; có các macro tương đương, nhanh hơn, cho hầu hết chúng.
Xem "Các lớp nhân vật" trong perlapi. Danh sách đầy đủ là:
"is_uni_alnum", "is_uni_alnumc", "is_uni_alnumc_lc", "is_uni_alnum_lc", "is_uni_alpha",
"is_uni_alpha_lc", "is_uni_ascii", "is_uni_ascii_lc", "is_uni_blank", "is_uni_blank_lc",
"is_uni_cntrl", "is_uni_cntrl_lc", "is_uni_digit", "is_uni_digit_lc", "is_uni_graph",
"is_uni_graph_lc", "is_uni_idfirst", "is_uni_idfirst_lc", "is_uni_lower",
"is_uni_lower_lc", "is_uni_print", "is_uni_print_lc", "is_uni_punct", "is_uni_punct_lc",
"is_uni_space", "is_uni_space_lc", "is_uni_upper", "is_uni_upper_lc", "is_uni_xdigit",
"is_uni_xdigit_lc", "is_utf8_alnum", "is_utf8_alnumc", "is_utf8_alpha", "is_utf8_ascii",
"is_utf8_blank", "is_utf8_char", "is_utf8_cntrl", "is_utf8_digit", "is_utf8_graph",
"is_utf8_idcont", "is_utf8_idfirst", "is_utf8_lower", "is_utf8_mark",
"is_utf8_perl_space", "is_utf8_perl_word", "is_utf8_posix_digit", "is_utf8_print",
"is_utf8_punct", "is_utf8_space", "is_utf8_upper", "is_utf8_xdigit", "is_utf8_xidcont",
"is_utf8_xidfirst".
Ngoài ra, ba chức năng chưa bao giờ hoạt động bình thường này không còn được dùng nữa:
"to_uni_lower_lc", "to_uni_title_lc" và "to_uni_upper_lc".
Một số hiếm sử dụng of dấu gạch chéo ngược ở trong biểu thức chính quy đang tại phản đối
Có ba cặp ký tự mà Perl nhận ra là siêu ký tự thông thường
các mẫu biểu thức: "{}", "[]" và "()". Chúng cũng có thể được sử dụng để phân định các mẫu,
như trong:
m {foo}
s (foo) (thanh)
Vì chúng là siêu ký tự, chúng có ý nghĩa đặc biệt đối với các mẫu biểu thức chính quy,
và hóa ra là bạn không thể tắt ý nghĩa đặc biệt đó bằng cách thông thường
trước chúng bằng dấu gạch chéo ngược, nếu bạn sử dụng chúng, được ghép nối, trong một mẫu được phân tách bằng
họ. Ví dụ, trong
m {foo \ {1,3 \}}
dấu gạch chéo ngược không thay đổi hành vi và điều này khớp với "fo" theo sau là
ba lần xuất hiện nữa của "o".
Những cách sử dụng như thế này, nơi chúng được hiểu là siêu ký tự, cực kỳ hiếm; chúng tôi
chẳng hạn như không có cái nào trong tất cả CPAN. Do đó, việc ngừng sử dụng này sẽ ảnh hưởng đến
rất ít mã. Tuy nhiên, nó đưa ra thông báo rằng bất kỳ mã nào như vậy cần phải thay đổi,
đến lượt nó sẽ cho phép chúng tôi thay đổi hành vi trong các phiên bản Perl trong tương lai để
dấu gạch chéo ngược thực sự có ảnh hưởng và không sợ rằng chúng ta đang âm thầm phá vỡ bất kỳ
Mã.
Tách các thẻ "(?" và "(*" in đều đặn biểu thức
Cảnh báo không dùng nữa hiện được đưa ra nếu dấu "(" và "?" Được phân tách bằng khoảng trắng hoặc
nhận xét trong cấu trúc biểu thức chính quy "(? ...)". Tương tự, nếu "(" và "*" là
được phân tách trong cấu trúc "(* VERB ...)".
Tiền PerlIO IO triển khai
Về lý thuyết, bạn hiện có thể xây dựng perl mà không cần PerlIO. Thay vào đó, bạn sẽ sử dụng một trình bao bọc
xung quanh stdio hoặc sfio. Trong thực tế, điều này không hữu ích lắm. Nó không được thử nghiệm tốt và
mà không có bất kỳ hỗ trợ nào cho các lớp IO hoặc (do đó) Unicode, nó không có nhiều tác dụng. Cao ốc
không có PerlIO rất có thể sẽ bị loại bỏ trong phiên bản tiếp theo của perl.
PerlIO hỗ trợ lớp "stdio" nếu muốn sử dụng stdio. Tương tự, một lớp sfio có thể là
được sản xuất trong tương lai, nếu cần.
Tương lai Không dùng nữa
· Nền tảng không có cơ sở hạ tầng hỗ trợ
Cả Windows CE và z / OS đều đã được bảo trì trong quá khứ và hiện đang
không xây dựng thành công cũng như không thường xuyên được kiểm tra khói. Những nỗ lực đang được tiến hành
để thay đổi tình huống này, nhưng không nên coi đó là điều hiển nhiên rằng các nền tảng
được an toàn và được hỗ trợ. Nếu chúng không thể xây dựng được và thường xuyên hút thuốc, hãy hỗ trợ
vì chúng có thể bị loại bỏ tích cực trong các bản phát hành trong tương lai. Nếu bạn quan tâm đến những
nền tảng và bạn có thể cho mượn thời gian, kiến thức chuyên môn hoặc phần cứng của mình để giúp hỗ trợ những
nền tảng, vui lòng cho nỗ lực phát triển perl biết bằng cách gửi email
"[email được bảo vệ]".
Một số nền tảng có vẻ như đã chết hoàn toàn khác cũng nằm trong danh sách ngắn cho
loại bỏ từ bây giờ đến v5.20.0:
DG / UX
Kế tiếp
Chúng tôi cũng nghĩ rằng có khả năng các phiên bản Perl hiện tại sẽ không còn xây dựng AmigaOS nữa,
DJGPP, NetWare (nguyên bản), OS / 2 và Plan 9. Nếu bạn đang sử dụng Perl trên một nền tảng như vậy
và quan tâm đến việc đảm bảo tương lai của Perl cho họ, vui lòng liên hệ với chúng tôi.
Chúng tôi tin rằng Perl từ lâu đã không thể xây dựng trên các kiến trúc endian hỗn hợp (chẳng hạn như
như PDP-11s) và có ý định xóa bất kỳ mã hỗ trợ nào còn lại. Tương tự, mã
hỗ trợ dld GNU dài màu sắc sẽ sớm bị xóa nếu không có ai tạo
họ được biết đến như một người dùng tích cực.
· Hoán đổi $ <và $>
Perl đã ủng hộ thành ngữ hoán đổi $ <và $> (và tương tự như vậy $ (và $)) thành
tạm thời bỏ quyền kể từ 5.0, như thế này:
($ <, $>) = ($>, $ <);
Tuy nhiên, thành ngữ này sửa đổi id nhóm / người dùng thực, có thể có mặt không mong muốn-
hiệu ứng, không còn hữu ích trên bất kỳ nền tảng nào perl hỗ trợ và làm phức tạp
thực hiện các biến này và gán danh sách nói chung.
Thay vào đó, chỉ nên gán cho $>:
địa phương $> = $ <;
Xem thêm: Setuid Demystifiedhttp://www.cs.berkeley.edu/~daw/papers/setuid-
usenix02.pdf>.
· "Microperl", lâu bị hỏng và không rõ mục đích hiện tại, sẽ bị loại bỏ.
· 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.
· Sử dụng $ x, trong đó "x" là viết tắt của bất kỳ ký tự điều khiển C0 thực tế nào (không in được) sẽ là
không được phép trong phiên bản Perl trong tương lai. Thay vào đó, hãy sử dụng "$ {x}" (trong đó "x" lại là viết tắt của
ký tự điều khiển), hoặc tốt hơn, $ ^ A, trong đó "^" là dấu mũ (CIRCUMFLEX ACCENT) và "A"
là viết tắt của bất kỳ ký tự nào được liệt kê ở cuối "OPERATOR DIFFERENCES" trong
xuyên tạc.
HIỆU QUẢ Cải tiến
· Danh sách các khai báo biến từ vựng ("my ($ x, $ y)") hiện được tối ưu hóa thành
op đơn và do đó nhanh hơn trước.
· Một bộ tiền xử lý C mới định nghĩa "NO_TAINT_SUPPORT" đã được thêm vào, nếu được đặt, sẽ vô hiệu hóa Perl's
hỗ trợ hoàn toàn. Sử dụng cờ dòng lệnh -T hoặc -t sẽ gây ra nguy hiểm chết người
lỗi. Hãy lưu ý rằng cả hai bài kiểm tra cốt lõi cũng như nhiều bài kiểm tra của phân phối CPAN sẽ
thất bại với thay đổi này. Về mặt tích cực, nó cung cấp một lợi ích hiệu suất nhỏ do
giảm phân nhánh.
Do không cho phép điều này trừ khi bạn Biết chính xác gì bạn đang nhận được mình thành.
· "Pack" với các đối số không đổi hiện được gấp lại không đổi trong hầu hết các trường hợp [perl # 113470].
· Tăng tốc độ đối sánh biểu thức chính quy với các thuộc tính Unicode. Thu được lớn nhất
dành cho "\ X", "cụm grapheme mở rộng" của Unicode. Mức tăng cho nó là khoảng 35% -
40%. Các lớp ký tự trong ngoặc vuông, ví dụ: "[0-9 \ x {100}]" chứa các điểm mã ở trên
255 cũng nhanh hơn.
· Trên các nền tảng hỗ trợ nó, một số macro trước đây hiện được triển khai dưới dạng nội tuyến tĩnh
chức năng. Điều này sẽ tăng tốc một chút trên các nền tảng không phải GCC.
· Việc tối ưu hóa hàm băm trong ngữ cảnh boolean đã được mở rộng để ảnh hưởng đến
"vô hướng (% hash)", "% hash? ...: ..." và "sub {% hash || ...}".
· Các toán tử Filetest quản lý ngăn xếp theo cách hiệu quả hơn từng phần một.
· Các quả địa cầu được sử dụng trong ngữ cảnh số hiện được đánh số trực tiếp trong hầu hết các trường hợp, thay vì
được đánh số thông qua chuỗi hóa.
· Toán tử lặp lại "x" hiện được gấp lại thành một hằng số duy nhất tại thời điểm biên dịch nếu
được gọi trong ngữ cảnh vô hướng với các toán hạng không đổi và không có dấu ngoặc đơn ở bên trái
toán hạng.
Modules và Thực dụng
Mới Modules và Thực dụng
· Cấu hình :: Perl :: V phiên bản 0.16 đã được thêm vào như một mô-đun có vòng đời kép. Nó cung cấp
truy xuất dữ liệu có cấu trúc của đầu ra "perl -V" bao gồm thông tin chỉ được biết đến
nhị phân "perl" và không khả dụng qua Cấu hình.
cập nhật Modules và Thực dụng
Để có danh sách đầy đủ các bản cập nhật, hãy chạy:
$ danh sách chính --diff 5.16.0 5.18.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.16.0.
· Lưu trữ :: Giải nén đã được nâng cấp lên 0.68.
Làm việc xung quanh một trường hợp cạnh trên Linux với giải nén của Busybox.
· Lưu trữ :: Tar đã được nâng cấp lên 1.90.
ptar hiện hỗ trợ tùy chọn -T cũng như các tùy chọn không dấu gạch ngang [rt.cpan.org # 75473],
[rt.cpan.org # 75475].
Tự động mã hóa tên tệp được đánh dấu là UTF-8 [rt.cpan.org # 75474].
Không sử dụng "tell" trên các trình xử lý IO :: Zlib [rt.cpan.org # 64339].
Đừng cố gắng "cắt" các liên kết tượng trưng.
· Autodie đã được nâng cấp lên 2.13.
"autodie" hiện chơi tốt với pragma 'mở'.
· B đã được nâng cấp lên 1.42.
Phương pháp "stashoff" của COPs đã được thêm vào. Điều này cung cấp quyền truy cập vào nội bộ
trường được thêm vào perl 5.16 trong các bản dựng có luồng [perl # 113034].
"B :: COP :: stashpv" hiện hỗ trợ tên gói UTF-8 và NUL được nhúng.
Tất cả "CVf_ *" và "GVf_ *" và các giá trị cờ khác liên quan đến SV hiện được cung cấp dưới dạng hằng số
trong không gian tên "B ::" và có sẵn để xuất. Danh sách xuất mặc định không có
đã thay đổi
Điều này làm cho mô-đun hoạt động với API pad mới.
· B :: Concise đã được nâng cấp lên 0.95.
Tùy chọn "-nobanner" đã được sửa và "định dạng" hiện có thể được hủy. Khi vượt qua một
tên phụ để kết xuất, nó cũng sẽ kiểm tra xem nó có phải là tên của một định dạng hay không. Nếu một
sub và một định dạng có chung tên, nó sẽ kết xuất cả hai.
Điều này bổ sung hỗ trợ cho cờ "OpMAYBE_TRUEBOOL" và "OPpTRUEBOOL" mới.
· B :: Debug đã được nâng cấp lên 1.18.
Điều này bổ sung hỗ trợ (theo thử nghiệm) cho "B :: PADLIST", đã được thêm vào Perl 5.17.4.
· B :: Deparse đã được nâng cấp lên 1.20.
Tránh cảnh báo khi chạy dưới "perl -w".
Bây giờ nó triển khai các điều khiển vòng lặp với mức độ ưu tiên chính xác và nhiều câu lệnh trong
một dòng "định dạng" hiện cũng được mô tả chính xác.
Bản phát hành này loại bỏ dấu chấm phẩy ở cuối trong các định dạng.
Bản phát hành này bổ sung kho dự trữ sơ khai cho các chương trình con từ vựng.
Nó không còn chết khi kết xuất "sort" mà không có đối số. Bây giờ nó bỏ qua một cách chính xác
dấu phẩy cho "system $ prog @args" và "executive $ prog @args".
· Bignum, bigint và bigrat đã được nâng cấp lên 0.33.
Phần ghi đè cho "hex" và "oct" đã được viết lại, loại bỏ một số vấn đề,
và thực hiện một thay đổi không tương thích:
· Trước đây, tùy chọn nào trong số "sử dụng bigint" hoặc "sử dụng bigrat" được biên dịch sau này sẽ mất
ưu tiên hơn cái kia, khiến "hex" và "oct" không tôn trọng pragma khác
khi trong phạm vi.
· Sử dụng bất kỳ câu nào trong ba phép ngữ dụng này sẽ gây ra "hex" và "oct" ở bất kỳ nơi nào khác trong
chương trình để đánh giá các đối số của chúng trong ngữ cảnh danh sách và ngăn chúng
suy ra $ _ khi được gọi mà không có đối số.
· Sử dụng bất kỳ câu nào trong ba phép ngữ dụng này sẽ làm cho "oct (" 1234 ")" trả về 1234 (đối với bất kỳ
số không bắt đầu bằng 0) ở bất kỳ đâu trong chương trình. Bây giờ "1234" đã được dịch
từ bát phân sang thập phân, cho dù trong phạm vi của pragma hay không.
· Ghi đè toàn cục tạo điều kiện cho việc sử dụng từ vựng "hex" và "oct" hiện được tôn trọng
mọi ghi đè hiện có đã có trước khi cài đặt ghi đè mới,
rơi trở lại họ ngoài phạm vi "sử dụng bignum".
· "Sử dụng bignum" hex "", "sử dụng bignum" oct "" và các lệnh gọi tương tự cho bigint và
bigrat hiện xuất hàm "hex" hoặc "oct", thay vì cung cấp toàn cục
ghi đè.
· Cá chép đã được nâng cấp lên 1.29.
Cá chép không còn bối rối khi "người gọi" trả về undef cho một gói đã được
đã xóa.
Các hàm "longmess ()" và "shortmess ()" hiện đã được lập thành tài liệu.
· CGI đã được nâng cấp lên 3.63.
Các chuỗi thoát HTML không được công nhận hiện được xử lý tốt hơn, có vấn đề
dòng mới không còn được chèn sau thẻ của "startform ()" hoặc "start_form ()",
và cảnh báo không có thật "Sự phụ thuộc không an toàn" xuất hiện với một số phiên bản của perl hiện là
đã làm việc xung quanh.
· Class :: Struct đã được nâng cấp lên 0.64.
Hàm tạo hiện tôn trọng các phương thức của bộ truy cập được ghi đè [perl # 29230].
· Nén :: Raw :: Bzip2 đã được nâng cấp lên 2.060.
Việc lạm dụng API "ma thuật" của Perl đã được khắc phục.
· Nén :: Raw :: Zlib đã được nâng cấp lên 2.060.
Nâng cấp zlib đi kèm lên phiên bản 1.2.7.
Sửa lỗi xây dựng trên Irix, Solaris và Win32 và cả khi xây dựng dưới dạng C ++
[rt.cpan.org # 69985], [rt.cpan.org # 77030], [rt.cpan.org # 75222].
Việc lạm dụng API "ma thuật" của Perl đã được khắc phục.
"nén ()", "uncompress ()", "memGzip ()" và "memGunzip ()" đã được tăng tốc bởi
làm cho việc xác thực tham số hiệu quả hơn.
· CPAN :: Meta :: Yêu cầu đã được nâng cấp lên 2.122.
Coi các yêu cầu undef đối với "from_string_hash" là 0 (kèm theo cảnh báo).
Đã thêm phương thức "request_for_module".
· CPANPLUS đã được nâng cấp lên 0.9135.
Cho phép thêm Blib / script đến PATH.
Lưu lịch sử giữa các lần gọi của trình bao.
Xử lý nhiều đối số "makemakerargs" và "makeflags" tốt hơn.
Điều này giải quyết các vấn đề với công cụ nguồn SQLite.
· Dữ liệu :: Dumper đã được nâng cấp lên 2.145.
Nó đã được tối ưu hóa để chỉ xây dựng một hàm băm vô hướng được nhìn thấy khi cần thiết, do đó tăng tốc độ
tăng cường tuần tự hóa một cách mạnh mẽ.
Các bài kiểm tra bổ sung đã được thêm vào để cải thiện câu lệnh, nhánh, điều kiện và
chương trình con bao phủ. Trên cơ sở phân tích phạm vi, một số nội dung của
Dumper.pm đã được cấu trúc lại. Hầu hết tất cả các phương pháp hiện đã được tài liệu hóa.
· DB_File đã được nâng cấp lên 1.827.
Mô-đun Perl chính không còn sử dụng cấu trúc "@_".
· Devel :: Peek đã được nâng cấp lên 1.11.
Điều này sửa lỗi biên dịch với trình biên dịch C ++ và làm cho mô-đun hoạt động với pad mới
API.
· Thông báo :: MD5 đã được nâng cấp lên 2.52.
Sửa lỗi dự phòng "Digest :: Perl :: MD5" OO [rt.cpan.org # 66634].
· Digest :: SHA đã được nâng cấp lên 5.84.
Điều này sửa một lỗi hai lần, có thể đã gây ra lỗ hổng bảo mật trong một số trường hợp.
· DynaLoader đã được nâng cấp lên 1.18.
Điều này là do một thay đổi nhỏ về mã trong XS để triển khai VMS.
Điều này khắc phục các cảnh báo về việc sử dụng phần "CODE" mà không có phần "OUTPUT".
· Mã hóa đã được nâng cấp lên 2.49.
Bí danh Mac x-mac-ce đã được thêm vào và các lỗi khác nhau đã được sửa trong
Mã hóa :: Unicode, Mã hóa :: UTF7 và Mã hóa :: GSM0338.
· Env đã được nâng cấp lên 1.04.
Việc triển khai SPLICE của nó không còn hoạt động sai trong ngữ cảnh danh sách.
· ExtUtils :: CBuilder đã được nâng cấp lên 0.280210.
Các tệp kê khai hiện được nhúng chính xác cho các phiên bản VC ++ sử dụng
họ. [perl # 111782, # 111798].
Danh sách các ký hiệu cần xuất hiện có thể được chuyển tới "link ()" khi ở trên Windows, cũng như trên các
OSes [perl # 115100].
· ExtUtils :: ParseXS đã được nâng cấp lên 3.18.
Mã C được tạo giờ đây tránh tăng "PL_amagic_generation" một cách không cần thiết trên
Các phiên bản Perl trong đó nó được thực hiện tự động (hoặc trên Perl hiện tại trong đó biến không
còn tồn tại).
Điều này tránh một cảnh báo không có thật đối với các thông số XSUB không được khởi tạo [perl # 112776].
· Tập tin :: Bản sao đã được nâng cấp lên 2.26.
"copy ()" không còn là tệp số không khi sao chép vào cùng một thư mục và bây giờ cũng
không thành công (vì điều đó đã được ghi nhận từ lâu) khi cố gắng sao chép một tệp
chính nó.
· Tập tin :: DosGlob đã được nâng cấp lên 1.10.
Bộ nhớ đệm bên trong của các tên tệp mà nó giữ cho mỗi người gọi hiện được giải phóng khi
người gọi được giải phóng. Điều này có nghĩa là "sử dụng Tệp :: DosGlob 'global'; eval 'vô hướng <*>'" không còn nữa
làm rò rỉ bộ nhớ.
· File :: Fetch đã được nâng cấp lên 0.38.
Đã thêm tùy chọn 'file_default' cho các URL không có thành phần tệp.
Sử dụng "File :: HomeDir" khi có sẵn và cung cấp "PERL5_CPANPLUS_HOME" để ghi đè
tự động dò tìm.
Luôn tìm nạp lại KIỂM TRA nếu "fetchdir" được đặt.
· Tập tin :: Find đã được nâng cấp lên 1.23.
Điều này sửa lỗi xử lý đường dẫn unixy không nhất quán trên VMS.
Các tệp riêng lẻ hiện có thể xuất hiện trong danh sách các thư mục cần tìm kiếm [perl # 59750].
· File :: Glob đã được nâng cấp lên 1.20.
File :: Glob đã có bản sửa lỗi giống hệt như File :: DosGlob. Vì nó là của riêng Perl
Toán tử "global" tự sử dụng (ngoại trừ trên VMS), điều này có nghĩa là "eval 'vô hướng <*>'" không còn nữa
rò rỉ.
Danh sách các mẫu được phân tách bằng dấu cách trả về danh sách kết quả dài không còn dẫn đến
hỏng bộ nhớ hoặc sự cố. Lỗi này đã được giới thiệu trong Perl 5.16.0. [perl # 114984]
· File :: Spec :: Unix đã được nâng cấp lên 3.40.
"abs2rel" có thể tạo ra kết quả không chính xác khi đưa ra hai đường dẫn tương đối hoặc gốc
thư mục hai lần [perl # 111510].
· File :: stat đã được nâng cấp lên 1.07.
"File :: stat" bỏ qua pragma nhỏ nhất và cảnh báo khi được sử dụng kết hợp
cùng với đó. Nhưng nó không phải là cảnh báo cho "-r". Điều này đã được sửa [perl # 111640].
"-p" hiện hoạt động và không trả về false cho các đường ống [perl # 111638].
Các toán tử "-x" và "-X" của "File :: stat" trước đây không đưa ra giá trị chính xác
kết quả cho các thư mục hoặc tệp thực thi khi chạy dưới quyền root. Họ đã từng
xử lý các quyền thực thi cho người chủ giống như đối với bất kỳ người dùng nào khác, thực hiện
kiểm tra thành viên nhóm vv cho các tệp không thuộc sở hữu của root. Bây giờ họ làm theo đúng
Hành vi Unix - đối với một thư mục, chúng luôn đúng và đối với một tệp nếu có
ba bit cho phép thực thi được thiết lập sau đó chúng báo cáo rằng root có thể thực thi tệp.
Toán tử "-x" và "-X" nội trang của Perl luôn đúng.
· File :: Temp đã được nâng cấp lên 0.23
Sửa các lỗi khác nhau liên quan đến việc xóa thư mục. Không muốn hủy liên kết các tệp mẫu nếu
lần hủy liên kết ban đầu không thành công, việc này sẽ khắc phục sự cố trên NFS.
· GDBM_File đã được nâng cấp lên 1.15.
Tham số thứ năm tùy chọn không có tài liệu cho "TIEHASH" đã bị xóa. Đây là
nhằm cung cấp quyền kiểm soát lệnh gọi lại được sử dụng bởi các hàm "gdbm *" trong trường hợp nghiêm trọng
lỗi (chẳng hạn như sự cố hệ thống tệp), nhưng không hoạt động (và có thể không bao giờ hoạt động).
Không có mã nào trên CPAN thậm chí đã cố gắng sử dụng nó. Cuộc gọi lại bây giờ luôn là cuộc gọi trước đó
mặc định, "croak". Sự cố trên một số nền tảng với cách chức năng "C" "croak"
được gọi là cũng đã được giải quyết.
· Hash :: Util đã được nâng cấp lên 0.15.
"hash_unlocked" và "hashref_unlocked" hiện trả về true nếu hash được mở khóa,
thay vì luôn trả về false [perl # 112126].
"hash_unlocked", "hashref_unlocked", "lock_hash_recurse" và "unlock_hash_recurse" là
hiện có thể xuất [perl # 112126].
Hai hàm mới, "hash_locked" và "hashref_locked", đã được thêm vào. Kỳ lạ,
hai hàm này đã được xuất, mặc dù chúng không tồn tại [perl
# 112126].
· HTTP :: Tiny đã được nâng cấp lên 0.025.
Thêm các tính năng xác minh SSL [github # 6], [github # 9].
Bao gồm URL cuối cùng trong hashref phản hồi.
Thêm tùy chọn "local_address".
Điều này cải thiện hỗ trợ SSL.
· IO đã được nâng cấp lên 1.28.
"sync ()" hiện có thể được gọi trên các trình xử lý tệp chỉ đọc [perl # 64772].
IO :: Socket cố gắng nhiều hơn để lưu vào bộ nhớ cache hoặc tìm nạp thông tin socket.
· IPC :: Cmd đã được nâng cấp lên 0.80.
Sử dụng "POSIX :: _ exit" thay vì "exit" trong "run_forked" [rt.cpan.org # 76901].
· IPC :: Open3 đã được nâng cấp lên 1.13.
Hàm "open3 ()" không còn sử dụng "POSIX :: close ()" để đóng các bộ mô tả tệp kể từ
điều đó phá vỡ việc đếm lại các bộ mô tả tệp do PerlIO thực hiện trong các trường hợp
các bộ mô tả tệp được chia sẻ bởi các luồng PerlIO, dẫn đến việc cố gắng đóng tệp
bộ mô tả lần thứ hai khi mọi luồng PerlIO như vậy bị đóng sau này.
· Ngôn ngữ :: Các mã đã được nâng cấp lên 3.25.
Nó bao gồm một số mã mới.
· Memoize đã được nâng cấp lên 1.03.
Sửa tùy chọn bộ nhớ cache "MERGE".
· Mô-đun :: Bản dựng đã được nâng cấp lên 0.4003.
Đã sửa lỗi trong đó các mô-đun không có $ VERSION có thể có phiên bản '0' được liệt kê trong
siêu dữ liệu 'cung cấp', siêu dữ liệu này sẽ bị TẠM DỪNG.
Đã sửa lỗi trong PodParser để cho phép các chữ số trong tên mô-đun.
Đã sửa lỗi trong đó đưa ra các đối số hai lần dẫn đến việc chúng trở thành mảng, dẫn đến
cài đặt các đường dẫn như MẢNG(0xdeadbeef) /lib/Foo.pm.
Một bản sửa lỗi nhỏ cho phép sử dụng đánh dấu xung quanh "Tên" ở đầu trong "tóm tắt" POD
và một số cải tiến về tài liệu đã được thực hiện.
· Mô-đun :: CoreList đã được nâng cấp lên 2.90
Thông tin phiên bản hiện được lưu trữ dưới dạng delta, điều này làm giảm đáng kể kích thước của
CoreList.pm tập tin.
Điều này khôi phục khả năng tương thích với các phiên bản perl cũ hơn và xóa danh sách lõi
dữ liệu cho các mô-đun khác nhau.
· Mô-đun :: Tải :: Có điều kiện đã được nâng cấp lên 0.54.
Khắc phục việc sử dụng "yêu cầu" trên các perls được cài đặt thành một đường dẫn có dấu cách.
Các cải tiến khác nhau bao gồm việc sử dụng mới Mô-đun :: Siêu dữ liệu.
· Mô-đun :: Siêu dữ liệu đã được nâng cấp lên 1.000011.
Việc tạo đối tượng Mô-đun :: Siêu dữ liệu cho tệp mô-đun điển hình đã được đẩy nhanh
khoảng 40% và một số cảnh báo giả về $ VERSION đã bị loại bỏ.
· Mô-đun :: Pluggable đã được nâng cấp lên 4.7.
Trong số các thay đổi khác, trình kích hoạt hiện được phép trên các sự kiện, điều này mang lại một cách hiệu quả
để sửa đổi hành vi.
· Net :: Ping đã được nâng cấp lên 2.41.
Điều này khắc phục một số lỗi kiểm tra trên Windows.
· Opcode đã được nâng cấp lên 1.25.
Phản ánh việc loại bỏ opcode boolkeys và bổ sung clonecv, introcv
và mã opcv.
· Quá tải đã được nâng cấp lên 1.22.
"no quá tải" hiện cảnh báo đối với các đối số không hợp lệ, giống như "sử dụng quá tải".
· Mã hóa PerlIO :: đã được nâng cấp lên 0.16.
Đây là mô-đun thực hiện lớp I / O ": encoding (...)". Nó không còn bị hỏng nữa
bộ nhớ hoặc sự cố khi phần cuối mã hóa phân bổ lại bộ đệm hoặc cung cấp cho nó một
typeglob hoặc vô hướng khóa băm được chia sẻ.
· PerlIO :: vô hướng đã được nâng cấp lên 0.16.
Bộ đệm vô hướng được cung cấp bây giờ có thể chỉ chứa các điểm mã 0xFF hoặc thấp hơn. [perl
# 109828]
· Perl :: OSType đã được nâng cấp lên 1.003.
Điều này sửa một lỗi phát hiện hệ điều hành VOS.
· Pod :: Html đã được nâng cấp lên 1.18.
Tùy chọn "--libpods" đã được khôi phục. Nó không được dùng nữa và việc sử dụng nó không có tác dụng gì
ngoại trừ đưa ra cảnh báo rằng nó không còn được hỗ trợ.
Vì các tệp HTML được tạo bởi pod2html tuyên bố có bộ ký tự UTF-8, thực tế
ghi các tệp ra bằng UTF-8 [perl # 111446].
· Pod :: Simple đã được nâng cấp lên 3.28.
Nhiều cải tiến đã được thực hiện, chủ yếu đối với Pod :: Simple :: XHTML, cũng có
thay đổi khả năng tương thích: tùy chọn "Code_in_verbatim" hiện bị tắt theo mặc định. Nhìn thấy
cpan / Pod-Simple / ChangeLog để biết chi tiết đầy đủ.
· Lại đã được nâng cấp lên 0.23
Các ký tự đơn lẻ [class] như "/ [s] /" hoặc "/ [s] / i" hiện được tối ưu hóa như thể chúng đã làm
không có dấu ngoặc, tức là "/ s /" hoặc "/ s / i".
Xem ghi chú về "op_comp" trong phần "Thay đổi nội bộ" bên dưới.
· An toàn đã được nâng cấp lên 2.35.
Sửa các tương tác với "Devel :: Cover".
Không đánh giá mã dưới "không nghiêm ngặt".
· Scalar :: Util đã được nâng cấp lên phiên bản 1.27.
Khắc phục sự cố quá tải với "sum".
"đầu tiên" và "giảm" bây giờ hãy kiểm tra lệnh gọi lại trước (vì vậy &Thành phố điện khí hóa phía tây dãy núi Rocky đầu tiên(1) không được phép).
Sửa lỗi "nhiễm bẩn" trên các giá trị kỳ diệu [rt.cpan.org # 55763].
Sửa "sum" trên các giá trị kỳ diệu trước đây [rt.cpan.org # 61118].
Sửa lỗi đọc quá cuối của bộ đệm cố định [rt.cpan.org # 72700].
· Tìm kiếm :: Dict đã được nâng cấp lên 1.07.
Không còn yêu cầu "thống kê" trên các xử lý tệp.
Sử dụng "fc" để viết hoa chữ thường.
· Socket đã được nâng cấp lên 2.009.
Các hằng số và chức năng cần thiết cho thành viên nhóm nguồn đa hướng IP đã được
thêm vào.
"unpack_sockaddr_in ()" và "unpack_sockaddr_in6 ()" bây giờ chỉ trả lại địa chỉ IP trong
ngữ cảnh vô hướng và "inet_ntop ()" hiện bảo vệ chống lại các đại lượng vô hướng có độ dài không chính xác đang
thông qua tại.
Điều này sửa lỗi đọc bộ nhớ chưa được khởi tạo.
· Kho lưu trữ đã được nâng cấp lên 2.41.
Sửa đổi $ _ [0] trong "STORABLE_freeze" không còn dẫn đến sự cố [perl # 112358].
Một đối tượng có lớp triển khai "STORABLE_attach" hiện chỉ được rã đông một lần khi ở đó
nhiều tham chiếu đến nó trong cấu trúc đang được rã đông [perl # 111918].
Hàm băm bị hạn chế không phải lúc nào cũng được rã đông chính xác [perl # 73972].
Đáng kinh ngạc sẽ phát ra tiếng kêu khi đóng băng đối tượng REF may mắn bằng "STORABLE_freeze ()"
phương thức [perl # 113880].
Bây giờ nó có thể đóng băng và làm tan băng vstrings một cách chính xác. Điều này gây ra một chút không tương thích
thay đổi trong định dạng lưu trữ, do đó, phiên bản định dạng đã tăng lên 2.9.
Điều này chứa các bản sửa lỗi khác nhau, bao gồm cả các bản sửa lỗi về khả năng tương thích cho các phiên bản cũ hơn của
Perl và xử lý vstring.
· Sys :: Syslog đã được nâng cấp lên 0.32.
Điều này bao gồm một số bản sửa lỗi liên quan đến "getervbyname ()", "setlogsock ()" và nhật ký
trong "syslog ()", cùng với các bản sửa lỗi cho Windows, Haiku-OS và GNU / kFreeBSD. Nhìn thấy
cpan / Sys-Syslog / Thay đổi để biết chi tiết đầy đủ.
· Thời hạn :: ANSIColor đã được nâng cấp lên 4.02.
Thêm hỗ trợ cho chữ in nghiêng.
Cải thiện khả năng xử lý lỗi.
· Thời hạn :: ReadLine đã được nâng cấp lên 1.10. Điều này khắc phục việc sử dụng cpan và cpanp
shell trên Windows trong trường hợp ổ đĩa hiện tại có chứa \ dev \ tty
tập tin.
· Thử nghiệm :: Khai thác đã được nâng cấp lên 3.26.
Sửa ngữ nghĩa cầu trên Win32 [rt.cpan.org # 49732].
Không sử dụng "Win32 :: GetShortPathName" khi gọi perl [rt.cpan.org # 47890].
Bỏ qua -T khi đọc shebang [rt.cpan.org # 64404].
Xử lý trường hợp chúng tôi không biết trạng thái chờ của bài kiểm tra một cách duyên dáng hơn.
Đặt dòng tóm tắt thử nghiệm 'ok' có thể ghi đè để có thể thay đổi nó thành một plugin để
làm cho đầu ra của chứng minh Idempotent.
Không chạy các tệp có thể ghi trên thế giới.
· Văn bản :: Tab và Văn bản :: Wrap đã được nâng cấp lên 2012.0818. Hỗ trợ Unicode
kết hợp các ký tự đã được thêm vào cả hai.
· Thread :: shared đã được nâng cấp lên 1.31.
Điều này thêm tùy chọn để cảnh báo hoặc bỏ qua các nỗ lực sao chép các cấu trúc không thể
được nhân bản, trái ngược với việc chỉ chết vô điều kiện trong trường hợp đó.
Điều này bổ sung hỗ trợ cho các giá trị có giá trị kép được tạo bởi Scalar :: Util :: dualvar.
· Tie :: StdHandle đã được nâng cấp lên 4.3.
"READ" hiện coi trọng đối số offset thành "read" [perl # 112826].
· Thời gian :: Local đã được nâng cấp lên 1.2300.
Giá trị giây lớn hơn 59 nhưng nhỏ hơn 60 không còn gây ra "timegm ()" và
"timelocal ()" để tránh né.
· Unicode :: UCD đã được nâng cấp lên 0.53.
Điều này thêm một chức năng all_casefolds () trả về tất cả các thư mục.
· Win32 đã được nâng cấp lên 0.47.
Các API mới đã được thêm vào để lấy và thiết lập trang mã hiện tại.
Đã loại bỏ Modules và Thực dụng
· Phiên bản :: Các yêu cầu đã bị xóa khỏi bản phân phối cốt lõi. Nó có sẵn
dưới một tên khác: CPAN :: Meta :: Yêu cầu.
Tài liệu
Những thay đổi đến Hiện tại Tài liệu
nước sôi
· Perlcheat đã được tổ chức lại, và một số phần mới đã được thêm vào.
dữ liệu perldata
· Bây giờ ghi lại rõ ràng hành vi của danh sách trình khởi tạo băm có chứa
các khóa trùng lặp.
bệnh tiểu đường
· Giải thích về các tham chiếu tượng trưng bị ngăn bởi "các tham chiếu nghiêm ngặt" bây giờ không
giả sử rằng người đọc biết các tham chiếu tượng trưng là gì.
perlfaq
· Perlfaq đã được đồng bộ hóa với phiên bản 5.0150040 từ CPAN.
giác quan
· Giá trị trả về của "pipe" hiện đã được ghi lại.
· Tài liệu làm rõ về "của chúng tôi".
trượt ngã
· Các động từ điều khiển vòng lặp ("dump", "goto", "next", "last" và "redo") luôn có
cùng ưu tiên với các toán tử gán, nhưng điều này vẫn chưa được ghi lại cho đến bây giờ.
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
· Dấu phân cách chưa kết thúc cho tài liệu ở đây
Thông báo này hiện xảy ra khi nhãn tài liệu tại đây có dấu ngoặc kép ban đầu nhưng
dấu ngoặc kép cuối cùng bị thiếu.
Điều này thay thế một thông báo lỗi không có thật và gây hiểu lầm về việc không tìm thấy chính nhãn
[perl # 114104].
· Hoảng sợ: quy trình giả trẻ em không bao giờ được lên lịch
Lỗi này xảy ra khi một tiến trình giả con trong quá trình triển khai ithreads trên
Windows không được lập lịch trong khoảng thời gian cho phép và do đó không thể
khởi tạo đúng cách [perl # 88840].
· Tên nhóm phải bắt đầu bằng một ký tự từ không phải chữ số trong regex; được đánh dấu bởi <- HERE trong
bệnh đa xơ cứng/
Lỗi này đã được thêm cho "(? & 0)", lỗi này không hợp lệ. Nó được sử dụng để sản xuất một
thông báo lỗi không thể hiểu được [perl # 101666].
· Không thể sử dụng giá trị không xác định làm tham chiếu chương trình con
Việc gọi một giá trị không xác định làm chương trình con hiện tạo ra thông báo lỗi này. Nó đã sử dụng
nhưng đã vô tình bị vô hiệu hóa, lần đầu tiên trong Perl 5.004 đối với các biến không phải phép thuật, và
sau đó trong Perl v5.14 cho các biến kỳ diệu (ví dụ: ràng buộc). Nó hiện đã được khôi phục. Trong
thời gian trung bình, undef được coi là một chuỗi rỗng [perl # 113576].
· Đăng ký "% s" thử nghiệm không được bật
Để sử dụng các sub từ vựng, trước tiên bạn phải kích hoạt chúng:
không có cảnh báo 'thử nghiệm :: lexical_subs';
sử dụng tính năng 'lexical_subs';
foo phụ của tôi {...}
Mới Cảnh báo
· 'Các chuỗi có điểm mã trên 0xFF có thể không được ánh xạ vào các xử lý tệp trong bộ nhớ'
· '% S' được giải quyết thành '\ o {% s}% d'
· 'Khoảng trắng theo sau trong định nghĩa bí danh charnames không được dùng nữa'
· 'Một chuỗi nhiều dấu cách trong định nghĩa bí danh tên biểu tượng không được chấp nhận'
· 'Chuyển UTF-8 không đúng định dạng sang "% s" không được dùng nữa'
· Chương trình con "&% s" không khả dụng
(W đóng) Trong quá trình biên dịch, một chương trình con hoặc eval có tên bên trong đang cố gắng
nắm bắt một chương trình con từ vựng bên ngoài mà hiện không có sẵn. Điều này có thể xảy ra
vì một trong hai lý do. Đầu tiên, chương trình con từ vựng có thể được khai báo trong một
chương trình con ẩn danh chưa được tạo. (Hãy nhớ rằng những người đăng ký được đặt tên là
được tạo tại thời điểm biên dịch, trong khi đăng ký ẩn danh được tạo vào thời gian chạy.) Ví dụ:
sub {my sub a {...} sub f {\ & a}}
Tại thời điểm f được tạo, nó không thể nắm bắt hiện tại phụ "a", vì
chương trình con ẩn danh chưa được tạo. Ngược lại, những điều sau đây sẽ không cung cấp
cảnh báo vì chương trình con ẩn danh hiện đã được tạo và đang hoạt động:
sub {my sub a {...} eval 'sub f {\ & a}'} -> ();
Tình huống thứ hai là do một eval truy cập vào một biến đã hết
phạm vi, ví dụ,
phụ f {
phụ của tôi một {...}
sub {eval '\ & a'}
}
f () -> ();
Ở đây, khi '\ & a' trong eval đang được biên dịch, f () hiện không được
được thực thi, vì vậy & a của nó không có sẵn để chụp.
· Khai báo trước chương trình con "% s" &% s mặt nạ trong cùng% s
(Sai khác) Một chương trình con "của tôi" hoặc "trạng thái" đã được khai báo lại trong phạm vi hiện tại hoặc
tuyên bố, loại bỏ hiệu quả tất cả quyền truy cập vào phiên bản trước đó. Đây là
hầu như luôn luôn là một lỗi đánh máy. Lưu ý rằng chương trình con trước đó sẽ vẫn
tồn tại cho đến khi kết thúc phạm vi hoặc cho đến khi tất cả các tham chiếu tới nó bị hủy.
· Tính năng% s là thử nghiệm
(Thử nghiệm) Cảnh báo này được phát ra nếu bạn bật một tính năng thử nghiệm qua
"tính năng sử dụng". Chỉ cần loại bỏ cảnh báo nếu bạn muốn sử dụng tính năng này, nhưng hãy biết
Khi làm như vậy, bạn đang có nguy cơ sử dụng một tính năng thử nghiệm có thể
thay đổi hoặc bị xóa trong phiên bản Perl trong tương lai:
không có cảnh báo "thử nghiệm :: lexical_subs";
sử dụng tính năng "lexical_subs";
· Ngủ (% u) quá lớn
(W tràn) Bạn đã gọi "ngủ" với một số lớn hơn mức đáng tin cậy có thể
xử lý và "ngủ" có lẽ đã ngủ ít thời gian hơn yêu cầu.
· Ký tự rộng trong setenv
Việc cố gắng đưa các ký tự rộng vào các biến môi trường thông qua% ENV hiện gây ra điều này
cảnh báo.
· "Số âm không hợp lệ (% s) trong chr"
"chr ()" hiện cảnh báo khi được chuyển một giá trị âm [perl # 83048].
· "Tràn số nguyên trong srand"
"srand ()" hiện cảnh báo khi được truyền một giá trị không phù hợp với "UV" (vì giá trị
sẽ bị cắt bớt chứ không phải tràn) [perl # 40605].
· "-I được sử dụng không có tên tệp trên dòng lệnh, đọc từ STDIN"
Chạy perl với cờ "-i" hiện cảnh báo nếu không có tệp đầu vào nào được cung cấp trên
dòng lệnh [perl # 113410].
Những thay đổi đến Hiện tại Chẩn đoán
· $ * Không còn được hỗ trợ
Cảnh báo rằng việc sử dụng $ * và $ # không còn được hỗ trợ hiện được tạo cho mọi
vị trí tham chiếu đến chúng. Trước đây nó sẽ không được tạo nếu một
biến sử dụng cùng một typeglob được nhìn thấy đầu tiên (ví dụ: "@ *" trước $ *) và sẽ không
được tạo ra cho lần sử dụng thứ hai và tiếp theo. (Thật khó để sửa lỗi
tạo cảnh báo mà không tạo cảnh báo mọi lúc, và cảnh báo mọi
thời gian phù hợp với các cảnh báo mà $ [đã sử dụng để tạo.)
· Các cảnh báo cho "\ b {" và "\ B {" đã được thêm vào. Chúng là một cảnh báo không dùng nữa
nên được tắt theo danh mục đó. Người ta không cần phải tắt regexp thông thường
cũng như cảnh báo để thoát khỏi những điều này.
· Hằng số (% s): Lệnh gọi đến & {$ ^ H {% s}} không trả về giá trị xác định
Quá tải liên tục trả về "undef" dẫn đến thông báo lỗi này. Đối với số
hằng số, nó được sử dụng để nói "Constant (undef)". "undef" đã được thay thế bằng
số chính nó.
· Lỗi được tạo ra khi một mô-đun không thể được tải ngay bây giờ bao gồm một gợi ý rằng mô-đun
có thể cần cài đặt: "Không thể định vị hopping.pm trong @INC (bạn có thể cần cài đặt
mô-đun nhảy) (@INC chứa: ...) "
· Đối số vectơ không được hỗ trợ với các phiên bản alpha
Cảnh báo này không thể bị dập tắt, ngay cả khi "không có cảnh báo". Bây giờ nó có thể bị đàn áp,
và đã được chuyển từ danh mục "nội bộ" sang danh mục "printf".
· "Không thể làm {n, m} với n> m trong regex; được đánh dấu bằng <- HERE trong m /% s /"
Lỗi nghiêm trọng này đã được chuyển thành một cảnh báo có nội dung:
Bộ định lượng {n, m} với n> m không thể khớp trong regex
(W regexp) Cực tiểu phải nhỏ hơn hoặc bằng cực đại. Nếu bạn thực sự muốn của bạn
regexp để đối sánh thứ gì đó 0 lần, chỉ cần đặt {0}.
· Cảnh báo "Nguyên mẫu chạy trốn" xảy ra trong các trường hợp kỳ lạ đã bị xóa.
vô ích và không nhất quán.
· Lỗi "Không phải là tham chiếu định dạng" đã được loại bỏ, là trường hợp duy nhất mà nó
có thể được kích hoạt là một lỗi.
· Lỗi "Không thể tạo phụ có tên% s" đã bị xóa vì lý do tương tự.
· Lỗi 'Không thể sử dụng "% s" của tôi trong so sánh sắp xếp' đã bị hạ cấp xuống cảnh báo,
'"my% s" được sử dụng trong so sánh sắp xếp "(với' trạng thái 'thay vì' của tôi 'cho các biến trạng thái).
Ngoài ra, phép phỏng đoán để đoán liệu từ vựng $ a hay $ b đã bị sử dụng sai
đã được cải thiện để tạo ra ít dương tính giả hơn. Lexical $ a và $ b không còn nữa
không được phép nếu chúng nằm ngoài khối sắp xếp. Ngoài ra, toán tử một ngôi hoặc danh sách được đặt tên
bên trong khối sắp xếp không còn khiến $ a hoặc $ b bị bỏ qua [perl # 86136].
Tiện ích Những thay đổi
h2x
· h2x không còn tạo ra mã không hợp lệ cho các định nghĩa trống. [perl # 20636]
Cấu hình và Compilation
· Đã thêm tùy chọn "useversonalarchname" để Định cấu hình
Khi được đặt, nó bao gồm 'api_versionstring' trong 'tên vòm'. Ví dụ
x86_64-linux-5.13.6-luồng-đa. Nó không được đặt theo mặc định.
Tính năng này được yêu cầu bởi Tim Bunce, người đã nhận thấy rằng "INSTALL_BASE" tạo ra một
cấu trúc thư viện không phân biệt theo phiên bản perl. Thay vào đó, nó đặt
kiến trúc các tệp cụ thể trong "$ install_base / lib / perl5 / $ Archname". Điều này làm cho nó
khó sử dụng đường dẫn thư viện "INSTALL_BASE" chung với nhiều phiên bản perl.
Bằng cách đặt "-Duseversionsarchname", $ Archname sẽ khác biệt đối với kiến trúc
và Phiên bản API, cho phép sử dụng hỗn hợp "INSTALL_BASE".
· Thêm tùy chọn "PERL_NO_INLINE_FUNCTIONS"
Nếu "PERL_NO_INLINE_FUNCTIONS" được xác định, không bao gồm "inline.h"
Điều này cho phép mã kiểm tra bao gồm các tiêu đề perl cho các định nghĩa mà không cần tạo
liên kết phụ thuộc vào thư viện perl (có thể chưa tồn tại).
· Cấu hình sẽ tôn trọng biến môi trường "MAILDOMAIN" bên ngoài, nếu được đặt.
· "Installman" không còn bỏ qua tùy chọn im lặng
· Cả hai tệp "META.yml" và "META.json" hiện đã được đưa vào bản phân phối.
· Thiết lập bây giờ sẽ phát hiện chính xác "isblank ()" khi biên dịch bằng trình biên dịch C ++.
· Phát hiện máy nhắn tin trong Thiết lập đã được cải thiện để cho phép các câu trả lời chỉ định
các tùy chọn sau tên chương trình, ví dụ: / usr / bin / less -R, nếu người dùng chấp nhận giá trị mặc định
giá trị. Điều này có ích perldoc khi xử lý ANSI thoát [perl # 72156].
Kiểm tra
· Bộ thử nghiệm hiện có một phần dành cho các bài kiểm tra yêu cầu dung lượng bộ nhớ rất lớn.
Các thử nghiệm này sẽ không chạy theo mặc định; chúng có thể được kích hoạt bằng cách đặt
Biến môi trường "PERL_TEST_MEMORY" thành số gibibyte bộ nhớ có thể
được sử dụng một cách an toàn.
Nền tảng Hỗ Trợ
Ngưng Nền tảng
BeOS
BeOS là một hệ điều hành dành cho máy tính cá nhân được phát triển bởi Be Inc, ban đầu dành cho
phần cứng BeBox của họ. OS Haiku được viết như một sự thay thế mã nguồn mở
cho / sự tiếp tục của BeOS, và cổng perl của nó là hiện tại và được duy trì tích cực.
UTS toàn cầu
Mã hỗ trợ liên quan đến UTS toàn cầu đã bị xóa. UTS là một phiên bản máy tính lớn của
Hệ thống V do Amdahl tạo ra, sau đó được bán cho UTS Global. Cảng chưa được
được đề cập từ trước Perl v5.8.0 và UTS Global hiện không còn tồn tại.
VM / ESA
Hỗ trợ cho VM / ESA đã bị loại bỏ. Cổng đã được thử nghiệm trên 2.3.0, mà IBM đã kết thúc
dịch vụ vào tháng 2002 năm 2.4.0. 2003 kết thúc dịch vụ vào tháng XNUMX năm XNUMX và được thay thế bởi
Z / VM. Phiên bản hiện tại của Z / VM là V6.2.0 và được lên lịch kết thúc dịch vụ vào
2015 / 04 / 30.
MPE / IX
Hỗ trợ cho MPE / IX đã bị loại bỏ.
EPOC
Mã hỗ trợ liên quan đến EPOC đã bị xóa. EPOC là một nhóm điều hành
hệ thống do Psion phát triển cho các thiết bị di động. Nó là tiền thân của Symbian.
Bản cập nhật lần cuối vào tháng 2002 năm XNUMX.
Tập văn tạp biên
Hỗ trợ cho Rhapsody đã bị xóa.
Nền tảng cụ thể Chú ý
AIX
Cấu hình bây giờ luôn thêm "-qlanglvl = extc99" vào cờ CC trên AIX khi sử dụng xlC. Điều này
sẽ giúp dễ dàng biên dịch một số mô-đun dựa trên XS giả sử C99 [perl
# 113778].
leng keng ++
Hiện có một giải pháp cho một lỗi trình biên dịch đã ngăn quá trình biên dịch với clang ++ kể từ khi
Perl v5.15.7 [perl # 112786].
C + +
Khi biên dịch lõi Perl dưới dạng C ++ (chỉ được hỗ trợ một phần), các hàm mathom
hiện được biên dịch thành "extern" C "", để đảm bảo khả năng tương thích nhị phân thích hợp. (Tuy nhiên, nhị phân
khả năng tương thích thường không được đảm bảo dù sao trong các tình huống mà điều này sẽ
vấn đề.)
Darwin
Dừng mã hóa cứng một căn chỉnh trên ranh giới 8 byte để sửa các bản dựng bằng -Dusemorebits.
Haiku
Perl bây giờ sẽ hoạt động tốt trên Haiku R1 Alpha 4.
nửa đêmBSD
"libc_r" đã bị xóa khỏi các phiên bản gần đây của MidnightBSD và các phiên bản cũ hơn hoạt động tốt hơn
với "pthread". Phân luồng hiện đã được bật bằng cách sử dụng "pthread" để sửa lỗi bản dựng với
phân luồng được bật trên 0.4-CURRENT.
Solaris
Trong Định cấu hình, tránh chạy các lệnh sed với cờ không được hỗ trợ trên Solaris.
VMS
· Nếu có thể, trường hợp tên tệp và đối số dòng lệnh hiện được giữ nguyên bởi
bật các tính năng CRTL "DECC $ EFS_CASE_PRESERVE" và "DECC $ ARGV_PARSE_STYLE" tại
Thời gian khởi động. Phân tích cú pháp mở rộng chỉ có hiệu lực khi bật phân tích cú pháp mở rộng trong
quy trình mà từ đó Perl được chạy.
· Bộ ký tự cho Cú pháp tên tệp mở rộng (EFS) hiện được bật theo mặc định trên VMS.
Trong số những thứ khác, điều này cung cấp khả năng xử lý tốt hơn các dấu chấm trong tên thư mục, nhiều
dấu chấm trong tên tệp và dấu cách trong tên tệp. Để có được hành vi cũ, hãy đặt
tên lôgic "DECC $ EFS_CHARSET" thành "DISABLE".
· Cố định liên kết trên các bản dựng được cấu hình với "-Dusemymalloc = y".
· Hỗ trợ thử nghiệm để xây dựng Perl với trình biên dịch HP C ++ có sẵn bởi
cấu hình với "-Dusecxx".
· Tất cả các tệp tiêu đề C từ thư mục cấp cao nhất của bản phân phối hiện đã được cài đặt
trên VMS, cung cấp tính nhất quán với thông lệ lâu đời trên các nền tảng khác.
Trước đây, chỉ một tập hợp con được cài đặt, điều này đã phá vỡ các bản dựng tiện ích mở rộng không phải cốt lõi cho
các phần mở rộng phụ thuộc vào phần còn thiếu bao gồm các tệp.
· Dấu ngoặc kép bây giờ được loại bỏ khỏi động từ lệnh (nhưng không phải tham số) cho các lệnh
sinh ra thông qua "hệ thống", dấu gạch ngược hoặc "mở" có đường ống. Trước đây, dấu ngoặc kép trên động từ
được chuyển qua DCL, lệnh này sẽ không nhận dạng được. Ngoài ra, nếu
động từ thực sự là một đường dẫn đến một hình ảnh hoặc thủ tục lệnh trên tập ODS-5, trích dẫn
bây giờ nó cho phép đường dẫn chứa khoảng trắng.
· Các a2p bản dựng đã được sửa cho trình biên dịch HP C ++ trên OpenVMS.
Win32
· Perl hiện có thể được xây dựng bằng trình biên dịch Visual C ++ 2012 của Microsoft bằng cách chỉ định
CCTYPE = MSVC110 (hoặc MSVC110FREE nếu bạn đang sử dụng phiên bản Express miễn phí cho Windows
Máy tính để bàn) trong win32 / Makefile.
· Tùy chọn xây dựng mà không có "USE_SOCKETS_AS_HANDLES" đã bị loại bỏ.
· Đã khắc phục sự cố trong đó perl có thể gặp sự cố trong khi dọn dẹp các luồng (bao gồm cả chính
luồng) trong các bản dựng gỡ lỗi theo luồng trên Win32 và có thể cả các nền tảng khác [perl
# 114496].
· Tình trạng chủng tộc hiếm gặp dẫn đến việc ngủ mất nhiều thời gian hơn yêu cầu, và
thậm chí có thể bị treo, đã được sửa [perl # 33096].
· "Liên kết" trên Win32 hiện đang cố gắng thiết lập $! thành các giá trị thích hợp hơn dựa trên Win32
Mã lỗi API. [perl # 112272]
Perl không còn làm xáo trộn khối môi trường, ví dụ: khi khởi chạy một quy trình con mới,
khi môi trường chứa các ký tự không phải ASCII. Các vấn đề đã biết vẫn còn,
tuy nhiên, khi môi trường chứa các ký tự bên ngoài mã ANSI hiện tại
(ví dụ: xem mục về Unicode trong% ENV trong
<http://perl5.git.perl.org/perl.git/blob/HEAD: /Porting/todo.pod>). [perl # 113536]
· Xây dựng perl với một số trình biên dịch Windows từng bị lỗi do sự cố với
toán tử "cầu" của miniperl (sử dụng chương trình "perlglob") xóa PATH
biến môi trường [perl # 113798].
· Một tùy chọn makefile mới, "USE_64_BIT_INT", đã được thêm vào các makefiles của Windows. Bộ
điều này để "xác định" khi xây dựng perl 32-bit nếu bạn muốn nó sử dụng số nguyên 64-bit.
Giảm kích thước mã máy, đã được thực hiện cho các tệp DLL của mô-đun XS trong Perl v5.17.2,
bây giờ đã được mở rộng cho chính DLL perl.
Xây dựng với VC ++ 6.0 vô tình bị hỏng trong Perl v5.17.2 nhưng hiện đã được sửa
một lần nữa.
Nhăn
Việc xây dựng trên WinCE hiện có thể một lần nữa, mặc dù cần phải làm việc nhiều hơn để hoàn thành
khôi phục một bản dựng sạch sẽ.
nội Những thay đổi
· Từ đồng nghĩa với "av_len ()" có tên gây hiểu lầm đã được tạo: "av_top_index ()" và
"av_tindex". Cả ba điều này đều trả về số lượng chỉ mục cao nhất trong mảng,
không phải là số phần tử mà nó chứa.
· SvUPGRADE () không còn là một biểu thức. Ban đầu macro này (và cơ bản của nó
chức năng, sv_upgrade ()) được ghi nhận là boolean, mặc dù trên thực tế, chúng luôn
gian lận về lỗi và không bao giờ trả lại sai. Năm 2005, tài liệu đã được cập nhật thành
chỉ định một giá trị trả về vô hiệu, nhưng SvUPGRADE () được để lại luôn trả về 1 cho ngược lại
tính tương thích. Điều này hiện đã bị xóa và SvUPGRADE () bây giờ là một tuyên bố không có
giá trị trả về.
Vì vậy, đây là một lỗi cú pháp:
if (! svUPGRADE (sv)) {croak (...); }
Nếu bạn có mã như vậy, chỉ cần thay thế nó bằng
SvUPGRADE (sv);
hoặc để tránh cảnh báo trình biên dịch với các đặc quyền cũ hơn, có thể
(vô hiệu) SvUPGRADE (sv);
· Perl có cơ chế sao chép-ghi-ghi mới cho phép bất kỳ đại lượng vô hướng SvPOK nào được nâng cấp lên
một đại lượng sao chép và ghi. Số tham chiếu trên bộ đệm chuỗi được lưu trữ trong
bộ đệm chuỗi chính nó. Tính năng này là không kích hoạt by mặc định.
Nó có thể được kích hoạt trong một bản dựng perl bằng cách chạy Thiết lập với
-Accflags = -DPERL_NEW_COPY_ON_WRITEvà chúng tôi khuyến khích các tác giả XS thử
mã với một perl được kích hoạt như vậy và cung cấp phản hồi. Thật không may, vẫn chưa có
một hướng dẫn tốt để cập nhật mã XS để đối phó với COW. Cho đến khi một tài liệu như vậy là
có sẵn, hãy tham khảo danh sách gửi thư perl5-porters.
Nó phá vỡ một số mô-đun XS bằng cách cho phép sao chép-ghi-ghi vô hướng đi qua các đường dẫn mã
mà chưa bao giờ gặp phải họ trước đây.
· Copy-on-write không còn sử dụng cờ SvFAKE và SvREADONLY. Do đó, SvREADONLY
cho biết SV chỉ đọc thực sự.
Sử dụng macro SvIsCOW (như trước đây) để xác định một đại lượng sao chép-ghi.
· "PL_glob_index" đã biến mất.
· Perl_croak_no_modify riêng đã bị xóa tham số ngữ cảnh. Nó bây giờ có
một nguyên mẫu vô hiệu. Người dùng của API công khai croak_no_modify vẫn không bị ảnh hưởng.
· Copy-on-write (shared hash key) không còn được đánh dấu là read-only. "SvREADONLY"
trả về false trên SV như vậy, nhưng "SvIsCOW" vẫn trả về true.
· Một loại op mới, "OP_PADRANGE" đã được giới thiệu. Trình tối ưu hóa lỗ nhìn trộm perl sẽ,
nếu có thể, hãy thay thế một oprange đơn lẻ cho một dấu đẩy theo sau bởi một hoặc nhiều
pad hoạt động, và có thể bỏ qua danh sách và hoạt động tiếp theo. Ngoài ra, op có thể
thực hiện các tác vụ được liên kết với RHS của nhiệm vụ "của tôi (...) = @_", vì vậy những
ops cũng có thể được tối ưu hóa.
· Đối sánh không phân biệt chữ hoa chữ thường bên trong lớp ký tự [được đặt trong ngoặc vuông] với nhiều ký tự
gấp không còn loại trừ một trong những khả năng trong những trường hợp mà nó đã từng.
[perl # 89774].
· "PL_formfeed" đã bị xóa.
· Công cụ biểu thức chính quy không còn đọc một byte sau khi kết thúc mục tiêu
chuỗi. Trong khi đối với tất cả các đại lượng vô hướng được hình thành bên trong, điều này không bao giờ nên là
vấn đề, thay đổi này tạo điều kiện cho các thủ thuật thông minh với bộ đệm chuỗi trong mô-đun CPAN.
[perl # 73542]
· Bên trong khối BEGIN, "PL_compcv" hiện trỏ đến chương trình con hiện đang biên dịch,
chứ không phải chính khối BEGIN.
· "Mg_length" không được dùng nữa.
· "Sv_len" bây giờ luôn trả về số byte và "sv_len_utf8" là số ký tự.
Trước đây, "sv_len" và "sv_len_utf8" đều gặp lỗi và đôi khi sẽ trả về
byte và đôi khi là ký tự. "sv_len_utf8" không còn giả định rằng đối số của nó là
trong UTF-8. Cả hai điều này đều không tạo bộ nhớ đệm UTF-8 cho các giá trị bị ràng buộc hoặc quá tải hoặc cho
không phải PV nữa.
· "Sv_mortalcopy" hiện sao chép bộ đệm chuỗi của các vô hướng khóa băm được chia sẻ khi được gọi từ
Mô-đun XS [perl # 79824].
· Cờ "RXf_MODIFIES_VARS" mới có thể được đặt bởi các công cụ biểu thức chính quy tùy chỉnh thành
chỉ ra rằng việc thực thi biểu thức chính quy có thể khiến các biến
đã sửa đổi. Điều này cho phép "s ///" biết để bỏ qua một số tối ưu nhất định. Perl's thông thường
công cụ biểu thức đặt cờ này cho các động từ quay lại đặc biệt đặt $ REGMARK
và $ REGERROR.
· Các API để truy cập các bảng từ vựng đã thay đổi đáng kể.
"PADLIST" giờ đây còn là "AV" nhưng thay vào đó là loại riêng của chúng. "PADLIST" hiện chứa một
"PAD" và "PADNAMELIST" của "PADNAME", chứ không phải "AV" cho bảng và danh sách
tên đệm. Các "PAD", "PADNAMELIST" và "PADNAME" sẽ được truy cập như vậy thông qua
API pad mới được thêm vào thay vì API "AV" và "SV" thuần túy. Xem perlapi cho
chi tiết.
· Trong API regex, các lệnh gọi lại nắm bắt được đánh số được chuyển qua một chỉ mục cho biết
biến đối sánh đang được truy cập. Có các giá trị chỉ mục đặc biệt cho "$`, $ &, $ & "
biến. Trước đây, ba giá trị giống nhau đã được sử dụng để truy xuất "$ {^ PREMATCH},
$ {^ MATCH}, $ {^ POSTMATCH} ", nhưng chúng hiện đã được gán ba giá trị riêng biệt.
Xem "Các lệnh gọi lại chụp được đánh số" trong perlreapi.
· "PL_sawampersand" trước đây là một boolean cho biết rằng bất kỳ "$`, $ &, $ & "nào có
đã được nhìn thấy; bây giờ nó chứa ba cờ một bit cho biết sự hiện diện của mỗi
các biến riêng lẻ.
· Mục nhập bản đồ kiểu "CV *" hiện hỗ trợ quá tải "& {}" và bảng đánh máy, giống như
"& {...}" [perl # 96872].
· Cờ "SVf_AMAGIC" để cho biết quá tải hiện nằm trên kho, không phải đối tượng. Nó
hiện được đặt tự động bất cứ khi nào một phương thức hoặc @ISA thay đổi, vì vậy ý nghĩa của nó có
cũng đã thay đổi. Bây giờ nó có nghĩa là "có khả năng quá tải". Khi bảng quá tải
được tính toán, cờ sẽ tự động tắt nếu không có quá tải, vì vậy có
sẽ không có sự chậm lại đáng chú ý.
Tính ổn định của các bảng quá tải hiện được kiểm tra khi các phương thức quá tải được gọi,
hơn là trong khi "ban phước".
Phép thuật "A" không còn nữa. Các thay đổi đối với việc xử lý cờ "SVf_AMAGIC" loại bỏ
cần cho nó.
"PL_amagic_generation" đã bị xóa do không còn cần thiết. Đối với các mô-đun XS, nó là
bây giờ là bí danh macro thành "PL_na".
Cài đặt quá tải dự phòng hiện được lưu trữ trong một mục nhập kho tách biệt với
quá tải chính nó.
· Mã xử lý ký tự đã được làm sạch ở những nơi. Những thay đổi nên được
hoạt động vô hình.
· Chức năng "nghiên cứu" không được thực hiện trong v5.16. Nó chỉ đơn giản là bị vô hiệu hóa thông qua một "trở lại"
bản tường trình; mã đã được giữ nguyên tại chỗ. Bây giờ mã hỗ trợ những gì "nghiên cứu" sử dụng để
làm đã bị loại bỏ.
· Theo perls luồng, không còn PV riêng biệt được phân bổ cho mỗi COP tới
lưu tên gói của nó ("cop-> stashpv"). Thay vào đó, có một sự bù đắp
("cop-> stashoff") vào mảng "PL_stashpad" mới, chứa các con trỏ stash.
· Trong API regex có thể cắm được, cấu trúc "regexp_engine" đã có được một trường mới
"op_comp", hiện chỉ dành cho mục đích sử dụng nội bộ của perl và nên được khởi tạo
thành NULL bởi các mô-đun plugin regex khác.
· Một chức năng mới "certcopstash" đã được thêm vào API, nhưng được coi là
thực nghiệm. Xem perlapi.
· Perl được sử dụng để triển khai phép thuật theo cách mà đôi khi có thể ẩn lỗi trong mã
có thể gọi mg_get () quá nhiều lần vào các giá trị kỳ diệu. Việc ẩn lỗi này không còn nữa
xảy ra, vì vậy các lỗi lâu ngày có thể hiển thị ngay bây giờ. Nếu bạn thấy các lỗi liên quan đến ma thuật
trong mã XS, hãy kiểm tra để đảm bảo rằng nó, cùng với các hàm Perl API mà nó sử dụng, gọi
mg_get () chỉ một lần vào SvGMAGICAL () các giá trị.
· Phân bổ OP cho các CV hiện nay sử dụng bộ cấp phát phiến. Điều này giúp đơn giản hóa việc quản lý bộ nhớ
cho các OP được phân bổ cho một CV, do đó, việc dọn dẹp sau lỗi biên dịch sẽ đơn giản hơn và
an toàn hơn [perl # 111462] [perl # 112312].
· "PERL_DEBUG_READONLY_OPS" đã được viết lại để hoạt động với trình cấp phát phiến mới,
cho phép nó bắt được nhiều vi phạm hơn trước.
· Trình phân bổ phiến cũ cho các hoạt động, chỉ được kích hoạt cho "PERL_IMPLICIT_SYS" và
"PERL_DEBUG_READONLY_OPS", đã bị gỡ bỏ.
Chọn Bug Sửa chữa
· Tại đây các trình kết thúc tài liệu không còn yêu cầu ký tự dòng mới kết thúc khi chúng
xảy ra ở cuối tệp. Đây đã là trường hợp ở cuối một chuỗi eval
[perl # 65838].
· Bản dựng "-DPERL_GLOBAL_THER" hiện miễn phí cấu trúc toàn cầu sau khi họ đã sử dụng xong
nó.
· Dấu '/' trên đường dẫn trong @INC sẽ không còn dấu '/' bổ sung.
· Lớp ": crlf" hiện hoạt động khi dữ liệu chưa đọc không vừa với bộ đệm của chính nó. [perl
# 112244].
· "Ungetc ()" hiện xử lý dữ liệu được mã hóa UTF-8. [perl # 116322].
· Một lỗi trong bản đồ chính gây ra bất kỳ loại C nào ánh xạ tới mục nhập bản đồ chính T_BOOL
không được đặt, cập nhật hoặc sửa đổi khi biến T_BOOL được sử dụng trong OUTPUT:
với một ngoại lệ cho RETVAL. T_BOOL trong phần INPUT: không bị ảnh hưởng.
Việc sử dụng loại trả về T_BOOL cho XSUB (RETVAL) không bị ảnh hưởng. Một tác dụng phụ của
sửa lỗi này là, nếu T_BOOL được chỉ định trong phần OUTPUT: (phần trước
không làm gì với SV) và SV chỉ đọc (nghĩa đen) được chuyển đến XSUB, croaks
như "Đã cố gắng sửa đổi giá trị chỉ đọc" sẽ xảy ra. [perl # 115796]
· Trên nhiều nền tảng, việc cung cấp tên thư mục làm tên tập lệnh khiến perl hoạt động
không có gì và báo cáo thành công. Bây giờ nó sẽ báo lỗi trên toàn cầu và thoát ra
nonzero. [perl # 61362]
· "Sort {undef} ..." dưới các cảnh báo nghiêm trọng không còn bị treo nữa. Nó đã bắt đầu đâm vào
Perl v5.16.
· Các dấu gạch chéo được may mắn vào nhau ("ban phước cho \% Foo ::, 'Bar'; phước lành \% Bar ::, 'Foo'") không
lâu hơn dẫn đến giải phóng gấp đôi. Lỗi này bắt đầu xảy ra trong Perl v5.16.
· Nhiều lỗi rò rỉ bộ nhớ đã được khắc phục, chủ yếu liên quan đến các cảnh báo và cú pháp nghiêm trọng
lỗi.
· Một số đối sánh biểu thức chính quy không thành công như "'f' = ~ /../g" không được đặt lại
"pos". Ngoài ra, các mẫu "khớp một lần" ("m? ...? G") cũng không thể đặt lại khi được gọi
lần thứ hai [perl # 23180].
· Một số lỗi liên quan đến "cục bộ * ISA" và "cục bộ * Foo ::" khiến bộ nhớ đệm MRO cũ có
đã được sửa.
· Định nghĩa một chương trình con khi typeglob của nó đã được đặt bí danh không còn dẫn đến kết quả cũ
bộ nhớ đệm phương thức. Lỗi này đã được giới thiệu trong Perl v5.10.
· Bản địa hóa một typeglob có chứa một chương trình con khi gói của typeglob đã được
bị xóa khỏi kho lưu trữ mẹ của nó không còn tạo ra lỗi nữa. Lỗi này đã được giới thiệu trong
Perl v5.14.
· Trong một số trường hợp, "local * method = ..." sẽ không thể đặt lại bộ nhớ đệm phương thức dựa trên
lối ra phạm vi.
· "/[.Foo.]/" không còn là lỗi nữa mà tạo ra cảnh báo (như trước đây) và đã được xử lý
là "/[.fo]/" [perl # 115818].
· "Goto $ bind_var" bây giờ gọi FETCH trước khi quyết định loại goto (chương trình con hoặc
nhãn) đây là.
· Đổi tên các gói thông qua phép gán hình cầu ("* Foo :: = * Bar ::; * Bar :: = * Baz ::") trong
kết hợp với "m? ...?" và "đặt lại" không còn làm cho các bản dựng theo luồng bị sập.
· Một số lỗi liên quan đến việc gán danh sách cho hàm băm đã được sửa. Nhiều trong số các
liên quan đến danh sách với các khóa lặp lại như "(1, 1, 1, 1)".
· Biểu thức "vô hướng (% h = (1, 1, 1, 1))" bây giờ trả về 4, không phải 2.
· Giá trị trả về của "% h = (1, 1, 1)" trong ngữ cảnh danh sách bị sai. Trước đây
sẽ trả về "(1, undef, 1)", bây giờ nó trả về "(1, undef)".
· Perl hiện đưa ra cảnh báo tương tự trên "($ s,% h) = (1, {})" như đối với "(% h) =
({}) "," Đã tìm thấy tham chiếu ở nơi mong đợi danh sách có kích thước chẵn ".
· Một số trường hợp cạnh bổ sung trong việc gán danh sách cho các hàm băm đã được sửa chữa. Vì
chi tiết xem cam kết 23b7025ebc.
· Các thuộc tính được áp dụng cho các biến từ vựng không còn bị rò rỉ bộ nhớ. [perl # 114764]
· "Dump", "goto", "last", "tiếp theo", "làm lại" hoặc "yêu cầu" theo sau bởi một từ trần (hoặc
phiên bản) và sau đó toán tử infix không còn là lỗi cú pháp. Nó từng dành cho
những toán tử infix đó (như "+") có nghĩa khác trong đó một thuật ngữ là
kỳ vọng. [perl # 105924]
· "Yêu cầu a :: b. 1" và "Yêu cầu a :: b + 1" không còn tạo ra sự mơ hồ sai lầm nữa
cảnh báo. [perl # 107002]
· Các cuộc gọi phương thức lớp hiện được phép trên bất kỳ chuỗi nào, và không chỉ các chuỗi bắt đầu bằng
một ký tự chữ và số. [perl # 105922]
· Một mẫu trống được tạo bằng "qr //" được sử dụng trong "m ///" không còn kích hoạt "trống
mẫu sử dụng lại hành vi của mẫu cuối cùng ". [perl # 96230]
· Ràng buộc một hàm băm trong quá trình lặp lại không còn dẫn đến rò rỉ bộ nhớ.
· Giải phóng một hàm băm bị ràng buộc trong quá trình lặp lại không còn dẫn đến rò rỉ bộ nhớ.
· Liệt kê chỉ định cho một mảng bị ràng buộc hoặc hàm băm bị chết trên CỬA HÀNG không còn dẫn đến
bộ nhớ bị rò rỉ.
· Nếu hàm băm gợi ý ("% ^ H") bị ràng buộc, mục nhập phạm vi thời gian biên dịch (sao chép gợi ý
băm) không còn làm rò rỉ bộ nhớ nếu FETCH chết. [perl # 107000]
· Việc gấp liên tục không còn gây ra hành vi "tách" "" một cách không thích hợp.
[perl # 94490]
· "Vô hướng được xác định (@array)", "được xác định do {& foo}" và các cấu trúc tương tự hiện xử lý
đối số "được định nghĩa" là một đại lượng vô hướng đơn giản. [perl # 97466]
· Chạy một gỡ lỗi tùy chỉnh xác định không có * DB :: DB global hoặc cung cấp một chương trình con sơ khai
for & DB :: DB không còn dẫn đến sự cố nữa mà thay vào đó là một lỗi. [perl # 114990]
· "Reset" "" bây giờ khớp với tài liệu của nó. "reset" chỉ đặt lại "m? ...?" các mẫu khi
được gọi mà không có đối số. Một chuỗi trống cho một đối số bây giờ không làm gì cả. (Nó đã sử dụng
được coi là không có đối số.) [perl # 97958]
· "Printf" với một đối số trả về một danh sách trống không còn đọc quá cuối
ngăn xếp, dẫn đến hành vi thất thường. [perl # 77094]
· "--Subname" không còn tạo ra các cảnh báo không rõ ràng sai lầm nữa. [perl # 77240]
· "V10" hiện được phép làm nhãn hoặc tên gói. Điều này đã vô tình bị phá vỡ khi
v-string đã được thêm vào Perl v5.6. [perl # 56880]
· "Length", "pos", "substr" và "sprintf" có thể bị nhầm lẫn bởi quan hệ, quá tải,
các tham chiếu và bảng đánh chữ nếu việc xâu chuỗi như vậy đã thay đổi nội
đại diện đến hoặc từ UTF-8. [perl # 114410]
· Utf8 :: encode bây giờ gọi FETCH và STORE trên các biến ràng buộc. utf8 :: decode now call
CỬA HÀNG (nó đã được gọi là FETCH).
· "$ Bind = ~ s / $ non_utf8 / $ utf8 /" không còn lặp lại vô hạn nếu biến được ràng buộc trả về
một chuỗi Latin-1, vô hướng khóa băm được chia sẻ hoặc tham chiếu hoặc typeglob chuỗi chỉ định là
ASCII hoặc Latin-1. Đây là một hồi quy từ v5.12.
· "S ///" không có / e hiện tốt hơn trong việc phát hiện khi nào nó cần bỏ qua một số
tối ưu hóa, sửa một số trường hợp lỗi:
· Khớp các biến trong các cấu trúc nhất định ("&&", "||", ".." và các cấu trúc khác) trong
phần thay thế; ví dụ: "s /(.)/$ l {$ a || $ 1} / g". [perl # 26986]
· Bí danh để khớp với các biến thay thế.
· $ REGERROR hoặc $ REGMARK thay thế. [perl # 49190]
· Một mẫu trống ("s // $ foo /") khiến mẫu thành công cuối cùng được sử dụng,
khi mẫu đó chứa các khối mã sửa đổi các biến trong
thay thế.
· Sự nhiễm bẩn của chuỗi thay thế không còn ảnh hưởng đến sự nhiễm bẩn của
giá trị trả về của "s /// e".
· $ | biến autoflush được tạo khi cần. Nếu điều này xảy ra (ví dụ:
nếu nó được đề cập trong một mô-đun hoặc eval) khi xử lý tệp hiện được chọn là
typeglob với một khe IO trống, nó đã từng bị lỗi. [perl # 115206]
· Các số dòng ở cuối chuỗi eval không còn bị tắt bởi một. [perl # 114658]
· Bộ lọc @INC (các chương trình con được trả về bởi các chương trình con trong @INC) đặt $ _ thành copy-on-
ghi vô hướng không còn khiến trình phân tích cú pháp sửa đổi bộ đệm chuỗi đó tại chỗ.
· "Length ($ object)" không còn trả về giá trị không xác định nếu đối tượng có chuỗi
quá tải trả về undef. [perl # 115260]
· Việc sử dụng "PL_stashcache", bộ nhớ cache tra cứu tên kho cho các cuộc gọi phương thức, đã được
phục hồi,
Cam kết da6b625f78f5f133 tháng 2011 năm XNUMX sơ ý phá mã tra cứu
giá trị trong "PL_stashcache". Vì nó là một bộ nhớ cache duy nhất, khá chính xác, mọi thứ được tiếp tục
làm việc mà không có nó.
· Lỗi "Không thể bản địa hóa thông qua tham chiếu" đã biến mất trong v5.16.0 khi "cục bộ hóa
% $ ref "xuất hiện trên dòng cuối cùng của chương trình con lvalue. Lỗi này đã biến mất đối với
"\ local% $ ref" trong perl v5.8.1. Nó hiện đã được khôi phục.
· Việc phân tích cú pháp của các tài liệu tại đây đã được cải thiện đáng kể, sửa một số lỗi phân tích cú pháp
và sự cố và rò rỉ một bộ nhớ, và sửa các số dòng tiếp theo sai trong
điều kiện nhất định.
· Bên trong một eval, thông báo lỗi cho một tài liệu chưa kết thúc ở đây không còn dòng mới
ở giữa nó [perl # 70836].
· Sự thay thế bên trong một mẫu thay thế ("s / $ {s |||} //") không còn gây nhầm lẫn
trình phân tích cú pháp.
· Có thể là một nơi kỳ lạ khi cho phép nhận xét, nhưng "s //" "# hello / e" luôn hoạt động,
trừ khi sẽ xảy ra một ký tự rỗng trước dấu # đầu tiên. Bây giờ nó hoạt động ngay cả trong
sự hiện diện của null.
· Dải ô không hợp lệ trong "tr ///" hoặc "y ///" không còn dẫn đến rò rỉ bộ nhớ.
· Chuỗi eval không còn xử lý toán tử giống như dấu ngoặc kép được phân tách bằng dấu chấm phẩy ở cuối
("eval 'q ;;'") là lỗi cú pháp.
· "Warning {$ _ => 1} + 1" không còn là lỗi cú pháp. Trình phân tích cú pháp thường bị nhầm lẫn
với các toán tử danh sách nhất định, theo sau là một hàm băm ẩn danh và sau đó là một toán tử infix
chia sẻ dạng của nó với toán tử một ngôi.
· "(Người gọi $ n) [6]" (cung cấp văn bản của eval) được sử dụng để trả về trình phân tích cú pháp thực tế
đệm. Việc sửa đổi nó có thể dẫn đến sự cố. Bây giờ nó luôn trả về một bản sao. Các
chuỗi trả về không còn "\ n;" gắn kết đến cùng. Văn bản trả lại cũng
bao gồm các nội dung ở đây-doc, đã từng bị bỏ qua.
· Bộ nhớ cache vị trí UTF-8 hiện đã được đặt lại khi truy cập các biến ma thuật, để tránh
bộ đệm chuỗi và bộ đệm vị trí UTF-8 không đồng bộ [perl # 114410].
· Nhiều trường hợp nhận ma thuật được gọi hai lần đối với chuỗi UTF-8 huyền diệu đã được
đã sửa.
· Mã này (khi không có $ & vv)
$ _ = 'x' x 1_000_000;
1 trong khi /(.)/;
được sử dụng để bỏ qua bản sao bộ đệm vì lý do hiệu suất, nhưng bị $ 1, v.v.
thay đổi nếu chuỗi ban đầu thay đổi. Điều đó hiện đã được sửa chữa.
· Perl không sử dụng PerlIO nữa để báo cáo thông báo hết bộ nhớ, vì PerlIO có thể
cố gắng cấp phát nhiều bộ nhớ hơn.
· Trong một biểu thức chính quy, nếu một cái gì đó được định lượng bằng "{n, m}" trong đó "n> m", nó
không thể phù hợp. Trước đây đây là một lỗi nghiêm trọng, nhưng bây giờ chỉ là một cảnh báo
(và cái gì đó sẽ không khớp). [perl # 82954].
· Nó được sử dụng cho các định dạng được xác định trong các chương trình con mà sau đó đã được
không xác định và xác định lại để đóng trên các biến trong vùng đệm sai (mới được xác định
bao quanh phụ), dẫn đến sự cố hoặc lỗi "Sao chép kỳ lạ".
· Định nghĩa lại XSUB tại thời điểm chạy có thể tạo ra cảnh báo với số dòng sai.
· Định dạng% vd sprintf không hỗ trợ các đối tượng phiên bản cho các phiên bản alpha. Nó đã sử dụng
để xuất ra chính định dạng (% vd) khi chuyển phiên bản alpha và cũng phát ra
Cảnh báo "Chuyển đổi không hợp lệ trong printf". Nó không còn nữa, nhưng tạo ra sản phẩm trống
chuỗi trong đầu ra. Nó cũng không còn bị rò rỉ bộ nhớ trong trường hợp này.
· Các lệnh gọi "$ obj-> SUPER :: method" trong gói chính có thể không thành công nếu gói SUPER có
đã được truy cập bằng các phương tiện khác.
· Stash aliasing ("* foo :: = * bar ::") không còn khiến lệnh gọi SUPER bỏ qua các thay đổi đối với
hoặc @ISA hoặc sử dụng gói sai.
· Các cuộc gọi phương thức trên các gói có tên kết thúc bằng :: SUPER không còn được coi là SUPER
các cuộc gọi phương thức, dẫn đến không tìm thấy phương thức. Hơn nữa, xác định
các chương trình con trong các gói như vậy không còn khiến chúng được tìm thấy bởi các cuộc gọi phương thức SUPER
trên gói có chứa [perl # 114924].
· "\ W" hiện khớp với các điểm mã U + 200C (ZERO WIDTH NON-JOINER) và U + 200D (ZERO WIDTH
NGƯỜI THAM GIA). "\ W" không còn khớp với những điều này nữa. Thay đổi này là do Unicode đã sửa
định nghĩa của họ về những gì "\ w" phải khớp.
· "Dump LABEL" không còn bị rò rỉ nhãn của nó nữa.
· Việc gấp liên tục không còn thay đổi hoạt động của các hàm như "stat ()" và
"truncate ()" có thể lấy tên tệp hoặc xử lý. "stat 1? foo: bar" bây giờ là
coi đối số của nó như một tên tệp (vì nó là một biểu thức tùy ý), thay vì
tay cầm "foo".
· "Truncate FOO, $ len" không còn coi "FOO" là tên tệp nếu
xử lý tệp đã bị xóa. Điều này đã bị hỏng trong Perl v5.16.0.
· Định nghĩa lại chương trình con sau khi các phép gán con-toàn cầu và toàn cầu không còn nữa
gây ra gấp đôi giải phóng hoặc tin nhắn hoảng sợ.
· "S ///" hiện biến vstrings thành chuỗi thuần túy khi thực hiện thay thế, ngay cả khi
chuỗi kết quả là giống nhau ("s / a / a /").
· Cảnh báo không phù hợp nguyên mẫu không còn xử lý sai số lượng đăng ký liên tục là không có
nguyên mẫu khi chúng thực sự có "".
· Các chương trình con không đổi và khai báo chuyển tiếp không còn ngăn chặn sự không khớp nguyên mẫu
cảnh báo bỏ sót tên phụ.
· "Undef" trên một chương trình con hiện xóa bộ kiểm tra cuộc gọi.
· Toán tử "ref" bắt đầu làm rò rỉ bộ nhớ trên các đối tượng được ban phước trong Perl v5.16.0. Điều này
đã được sửa [perl # 114340].
· "Use" không còn cố gắng phân tích cú pháp các đối số của nó như một câu lệnh, làm cho "use hằng {()
}; "một lỗi cú pháp [perl # 114222].
· Trên các bản dựng gỡ lỗi, các cảnh báo "chưa được khởi tạo" bên trong các định dạng không còn gây ra xác nhận nữa
những thất bại.
· Trên các bản dựng gỡ lỗi, các chương trình con lồng nhau bên trong các định dạng không còn gây ra xác nhận nữa
thất bại [perl # 78550].
· Các định dạng và câu lệnh "sử dụng" hiện được cho phép bên trong các định dạng.
· "Print $ x" và "sub {print $ x} -> ()" luôn tạo ra cùng một đầu ra. Nó đã
có thể để sau này từ chối đóng trên $ x nếu biến không hoạt động;
ví dụ: nếu nó được định nghĩa bên ngoài một chương trình con có tên hiện đang chạy.
· Tương tự, "print $ x" và "print eval '$ x'" bây giờ tạo ra cùng một đầu ra. Điều này cũng
cho phép các biến "my $ x if 0" được hiển thị trong trình gỡ lỗi [perl # 114018].
· Các định dạng được gọi là đệ quy không còn dựa trên các biến từ vựng của riêng chúng nữa, nhưng mỗi
cuộc gọi đệ quy có bộ từ vựng riêng của nó.
· Cố gắng giải phóng một định dạng đang hoạt động hoặc xử lý được liên kết với nó không còn kết quả
trong một vụ tai nạn.
· Phân tích cú pháp định dạng không còn bị nhầm lẫn bởi dấu ngoặc nhọn, dấu chấm phẩy và mức độ ưu tiên thấp
các toán tử. Trước đây có thể sử dụng dấu ngoặc nhọn làm dấu phân cách định dạng (thay vì "="
và "."), nhưng chỉ đôi khi. Dấu chấm phẩy và toán tử có mức độ ưu tiên thấp trong định dạng
các dòng đối số không còn khiến trình phân tích cú pháp nhầm lẫn với việc bỏ qua giá trị trả về của dòng. Trong
định dạng dòng đối số, dấu ngoặc nhọn hiện có thể được sử dụng cho các hàm băm ẩn danh, thay vì
luôn được coi là khối "do".
· Các định dạng hiện có thể được lồng vào bên trong các khối mã trong các biểu thức chính quy và các dấu ngoặc kép khác
cấu trúc ("/(?{...})/" và "qq /${...}/") [perl # 114040].
· Định dạng không còn được tạo sau khi biên dịch lỗi.
· Trong các bản dựng gỡ lỗi, -DA tùy chọn dòng lệnh bắt đầu gặp sự cố trong Perl v5.16.0.
Nó đã được sửa [perl # 114368].
· Một tình huống bế tắc tiềm ẩn liên quan đến việc kết thúc sớm một nhánh giả
con trong bản dựng Windows có bật ithreads đã được sửa. Điều này giải quyết
vấn đề chung của t / op / fork.t thử nghiệm treo trên Windows [perl # 88840].
· Mã tạo ra lỗi từ "request ()" có thể đọc một hoặc hai
byte trước khi bắt đầu tên tệp đối với tên tệp dài dưới ba byte và
kết thúc bằng "/\.p?\z/". Điều này hiện đã được sửa chữa. Lưu ý rằng điều đó có thể không bao giờ xảy ra
với tên mô-đun được cung cấp cho "use ()" hoặc "request ()".
· Việc xử lý tên đường dẫn của các mô-đun được cung cấp cho "request ()" đã được thực hiện an toàn theo chuỗi trên
VMS.
· Ổ cắm không chặn đã được sửa trên VMS.
· Pod bây giờ có thể được lồng trong mã bên trong một cấu trúc được trích dẫn bên ngoài một chuỗi eval.
Điều này được sử dụng để chỉ hoạt động trong chuỗi evals [perl # 114040].
· "Goto" "hiện đang tìm kiếm một nhãn trống, tạo ra lỗi" goto phải có nhãn "
thay vì thoát khỏi chương trình [perl # 111794].
· "Goto" \ 0 "" giờ sẽ chết với "Không thể tìm thấy nhãn" thay vì "goto phải có nhãn".
· Hàm C "hv_store" từng gây ra lỗi khi sử dụng trên "% ^ H" [perl # 111000].
· Một trình kiểm tra cuộc gọi được đính kèm với một nguyên mẫu đóng cửa qua "cv_set_call_checker" hiện đã được sao chép
để đóng cửa được nhân bản từ nó. Vì vậy, "cv_set_call_checker" hiện hoạt động bên trong một thuộc tính
xử lý để đóng cửa.
· Viết tới $ ^ N được sử dụng để không có hiệu lực. Bây giờ nó bị bẻ gãy với "Sửa đổi một bài đọc-
only value "theo mặc định, nhưng có thể bị ghi đè bởi một biểu thức chính quy tùy chỉnh
, như với $ 1 [perl # 112184].
· "Undef" trên cầu ký tự điều khiển ("undef * ^ H") không còn phát ra cảnh báo sai nữa
về sự mơ hồ [perl # 112456].
· Vì lợi ích của hiệu quả, nhiều toán tử và các hàm tích hợp trả về cùng một đại lượng vô hướng
mỗi lần. Các chương trình con Lvalue và các chương trình con trong không gian tên CORE :: đã cho phép
chi tiết thực hiện này để rò rỉ qua. "print & CORE :: uc (" a "), & CORE :: uc (" b ")"
được sử dụng để in "BB". Điều tương tự sẽ xảy ra với một chương trình con lvalue trả về
giá trị trả về của "uc". Bây giờ giá trị được sao chép trong những trường hợp như vậy.
· Cú pháp "method {}" với một khối trống hoặc một khối trả về một danh sách trống được sử dụng để
sụp đổ hoặc sử dụng một số giá trị ngẫu nhiên còn lại trên ngăn xếp làm vật bất biến của nó. Bây giờ nó tạo ra một
lỗi.
· "Vec" hiện hoạt động với hiệu số cực lớn (> 2 GB) [perl # 111730].
· Các thay đổi đối với cài đặt quá tải hiện có hiệu lực ngay lập tức, cũng như các thay đổi đối với kế thừa
mà ảnh hưởng đến quá tải. Chúng chỉ có hiệu lực sau khi "chúc phúc".
Các đối tượng được tạo trước một lớp có bất kỳ quá tải nào được sử dụng để không
quá tải ngay cả khi lớp đã bị quá tải thông qua "sử dụng quá tải" hoặc @ISA
thay đổi, và thậm chí sau khi "ban phước". Điều này đã được sửa [perl # 112708].
· Các lớp bị quá tải bây giờ có thể kế thừa các giá trị dự phòng.
· Quá tải không tôn trọng giá trị dự phòng bằng 0 nếu có các đối tượng bị quá tải
trên cả hai mặt của toán tử gán như "+ =" [perl # 111856].
· "Pos" hiện bẻ khóa với các đối số băm và mảng, thay vì tạo ra sai
cảnh báo.
· "While (mỗi% h)" bây giờ ngụ ý "while (được định nghĩa ($ _ = mỗi% h))", như "readline" và
"readdir".
· Đăng ký trong không gian tên CORE :: không còn bị treo sau "undef * _" khi được gọi mà không
danh sách đối số (& CORE :: thời gian không có dấu ngoặc đơn).
· "Unpack" không còn tạo ra lỗi "'/' phải theo kiểu số trong giải nén" khi
đó là dữ liệu bị lỗi [perl # 60204].
· "Join" và "@array" hiện chỉ gọi FETCH một lần trên $ "[perl # 8931] được ràng buộc.
· Một số lệnh gọi chương trình con được tạo bằng cách biên dịch các hoạt động cốt lõi bị ảnh hưởng bởi "CORE :: GLOBAL"
ghi đè đã thực hiện kiểm tra op hai lần. Việc kiểm tra luôn luôn có ý nghĩa quan trọng đối với
Mã Perl, nhưng việc kiểm tra kỹ lưỡng có thể quan trọng khi có liên quan đến bộ kiểm tra cuộc gọi tùy chỉnh.
· Một điều kiện đua từng tồn tại xung quanh ngã ba có thể gây ra tín hiệu được gửi đến
cha mẹ được xử lý bởi cả cha mẹ và con. Tín hiệu hiện bị chặn trong thời gian ngắn xung quanh
fork để ngăn điều này xảy ra [perl # 82580].
· Việc triển khai các khối mã trong biểu thức chính quy, chẳng hạn như "(? {})" Và
"(?? {})", đã được làm lại rất nhiều để loại bỏ toàn bộ lỗi. Người dùng chính-
những thay đổi có thể nhìn thấy là:
· Các khối mã trong các mẫu hiện được phân tích cú pháp theo cùng một lượt như xung quanh
mã số; đặc biệt là không cần thiết phải niềng răng cân đối nữa: điều này bây giờ
công trình:
/ (? {$ x = '{'}) /
Điều này có nghĩa là thông báo lỗi này không còn được tạo ra nữa:
Trình tự (? {...}) không bị kết thúc hoặc không được {} cân bằng trong regex
nhưng một lỗi mới có thể được nhìn thấy:
Chuỗi (? {...}) không được kết thúc bằng ')'
Ngoài ra, các khối mã theo nghĩa đen trong các mẫu thời gian chạy chỉ được biên dịch một lần,
tại thời gian biên dịch perl:
cho $ p (...) {của tôi
# khối mã 'FOO' này được biên dịch một lần,
# cùng lúc với vòng lặp 'for' xung quanh
/ $ p {(? {FOO;}) /;
}
· Các biến Lexical hiện đã tốt hơn liên quan đến phạm vi, đệ quy và hành vi đóng.
Đặc biệt, "/ A (? {B}) C /" hoạt động (từ quan điểm kết thúc) giống hệt như "/ A /
&& do {B} && / C / ", trong khi" qr / A (? {B}) C / "giống như" sub {/ A / && do {B} && / C /} ".
Vì vậy, mã này hiện hoạt động theo cách bạn có thể mong đợi, tạo ra ba regex phù hợp với 0,
1 và 2:
cho $ i (0..2) {của tôi
push @r, qr / ^ (?? {$ i}) $ /;
}
"1" = ~ $ r [1]; # diêm
· Bây giờ pragma "use re 'eval'" chỉ được yêu cầu cho các khối mã được xác định tại
thời gian chạy; cụ thể là ở phần sau, văn bản của mẫu $ r vẫn là
được nội suy vào mẫu mới và được biên dịch lại, nhưng cá nhân được biên dịch
các khối mã trong $ r được sử dụng lại thay vì được biên dịch lại và "sử dụng lại 'eval'"
không cần thiết nữa:
my $ r = qr / abc (? {....}) def /;
/ xyz $ r /;
· Các nhà khai thác điều khiển lưu lượng không còn gặp sự cố. Mỗi khối mã chạy trong một động mới
phạm vi, vì vậy "tiếp theo", v.v. sẽ không thấy bất kỳ vòng lặp bao quanh nào. "return" trả về một giá trị
từ khối mã, không phải từ bất kỳ chương trình con đi kèm nào.
· Perl thường lưu trữ việc biên dịch các mẫu thời gian chạy và không biên dịch lại
nếu mẫu không thay đổi, nhưng tính năng này hiện bị vô hiệu hóa nếu được yêu cầu đối với
hành vi đúng của các đóng cửa. Ví dụ:
mã $ của tôi = '(?? {$ x})';
cho $ x (1..3) {của tôi
# biên dịch lại để xem giá trị mới của $ x mỗi lần
$ x = ~ / $ mã /;
}
· Các cờ "/ msix" và "(? Msix)", v.v. bây giờ được truyền vào giá trị trả về từ
"(?? {})"; điều này hiện hoạt động:
"AB" = ~ / a (?? {'b'}) / i;
· Cảnh báo và lỗi sẽ xuất hiện từ mã xung quanh (hoặc trong thời gian chạy
khối mã, từ eval) chứ không phải từ "re_eval":
sử dụng re 'eval'; $ c = '(? {warning "foo"})'; / $ c /;
/ (? {warning "foo"}) /;
trước đây đã cho:
foo tại (re_eval 1) dòng 1.
foo tại (re_eval 2) dòng 1.
và bây giờ cho:
foo tại (eval 1) dòng 1.
foo tại / một số / dòng prog 2.
· Perl hiện có thể được biên dịch lại để sử dụng bất kỳ phiên bản Unicode nào. Trong v5.16, nó hoạt động trên
Unicodes 6.0 và 6.1, nhưng có nhiều lỗi khác nhau nếu các bản phát hành trước đó được sử dụng; các
càng cũ thì càng có nhiều vấn đề.
· "Vec" không còn tạo ra cảnh báo "chưa được khởi tạo" trong ngữ cảnh giá trị [perl # 9423].
· Việc tối ưu hóa liên quan đến các chuỗi cố định trong biểu thức chính quy có thể gây ra lỗi nghiêm trọng
hình phạt thực hiện trong các trường hợp cạnh. Điều này đã được sửa [perl # 76546].
· Trong một số trường hợp nhất định, bao gồm các bài viết con trống trong một biểu thức chính quy (chẳng hạn như
"(? :)" hoặc "(?: |)") có thể vô hiệu hóa một số tối ưu hóa. Điều này đã được sửa chữa.
· Thông báo "Không thể tìm thấy số opnumber" mà "nguyên mẫu" tạo ra khi truyền một chuỗi
như "CORE :: nonexists_keyword" hiện chuyển UTF-8 và NUL được nhúng qua không thay đổi
[perl # 97478].
· "Nguyên mẫu" hiện xử lý các biến ma thuật như $ 1 theo cùng một cách với các biến không ma thuật
khi kiểm tra tiền tố CORE ::, thay vì coi chúng như tên chương trình con.
· Theo perls luồng, một khối mã thời gian chạy trong một biểu thức chính quy có thể làm hỏng
tên gói được lưu trữ trong cây op, dẫn đến việc đọc sai trong "người gọi" và có thể
sự cố [perl # 113060].
· Tham chiếu đến một nguyên mẫu bao đóng ("\ & {$ _ [1]}" trong một trình xử lý thuộc tính cho một bao đóng) không
lâu hơn dẫn đến một bản sao của chương trình con (hoặc lỗi xác nhận khi gỡ lỗi
xây dựng).
· "Eval '__PACKAGE__'" bây giờ trả về câu trả lời đúng trên các bản dựng theo luồng nếu hiện tại
gói đã được gán trên (như trong "* ThisPackage :: = * ThatPackage ::") [perl
# 78742].
· Nếu một gói bị xóa bởi mã mà nó gọi, thì "người gọi" có thể thấy một
khung ngăn xếp thuộc gói đã xóa đó. "người gọi" có thể gặp sự cố nếu kho lưu trữ
địa chỉ bộ nhớ đã được sử dụng lại cho một đại lượng vô hướng và việc thay thế được thực hiện trên cùng một
vô hướng [perl # 113486].
· "UNIVERSAL :: can" không còn xử lý đối số đầu tiên của nó theo cách khác tùy thuộc vào việc
nó là một chuỗi hoặc số bên trong.
· "Mở" bằng "<&" để chế độ kiểm tra xem đối số thứ ba có phải là số hay không, trong
xác định xem nó như một bộ mô tả tệp hay một tên xử lý. Huyền diệu
các biến như $ 1 luôn không kiểm tra số và được coi là xử lý
tên.
· "Cảnh báo" của xử lý các biến ma thuật ($ 1, ràng buộc) đã được sửa chữa một số.
"FETCH" hiện chỉ được gọi một lần trên đối số ràng buộc hoặc $ @ [perl # 97480] bị ràng buộc. Trói
các biến trả về các đối tượng xâu chuỗi là "" không còn bị bỏ qua. $ @ Bị ràng buộc
điều đó đã xảy ra để trả về một tham chiếu trước thời gian nó được sử dụng không còn nữa
mặc kệ.
· "Warning" "" hiện xử lý $ @ với một số trong đó theo cách tương tự, bất kể nó có
đã xảy ra qua "$ @ = 3" hoặc "$ @ =" 3 "". Nó được sử dụng để bỏ qua trước đây. Bây giờ nó kết thúc
"\ t ... đã bắt được", như nó đã luôn làm với "$ @ =" 3 "".
· Toán tử số trên các biến ảo (ví dụ: "$ 1 + 1") được sử dụng để sử dụng dấu phẩy động
ngay cả khi các phép toán số nguyên thích hợp hơn, dẫn đến mất
độ chính xác trên nền tảng 64-bit [perl # 109542].
· Phủ định riêng không còn coi một chuỗi là một số nếu chuỗi đó đã được sử dụng
như một con số tại một số thời điểm. Vì vậy, nếu $ x chứa chuỗi "chó", "- $ x" trả về
"-dogs" ngay cả khi "$ y = 0 + $ x" đã xảy ra tại một số điểm.
· Trong Perl v5.14, "-'- 10 '" đã được sửa để trả về "10", không phải "+10". Nhưng những biến số huyền diệu
($ 1, mối quan hệ) vẫn chưa được cố định cho đến bây giờ [perl # 57706].
· Phủ định riêng giờ xử lý các chuỗi một cách nhất quán, bất kể "UTF8" bên trong là gì
cờ.
· Một hồi quy được giới thiệu trong Perl v5.16.0 liên quan đến "tr /DANH SÁCH TÌM KIẾM / DANH SÁCH THAY THẾ / " có
đã được sửa. Chỉ trường hợp đầu tiên được cho là có nghĩa nếu một ký tự
xuất hiện nhiều lần trong "DANH SÁCH TÌM KIẾM ". Trong một số trường hợp, trường hợp cuối cùng
đã ghi đè tất cả những cái trước đó. [perl # 113584]
· Các biểu thức chính quy như "qr / \ 87 /" trước đây đã âm thầm chèn một ký tự NUL, do đó
khớp như thể nó đã được viết "qr / \ 00087 /". Bây giờ nó khớp như thể nó đã từng
được viết là "qr / 87 /", với thông báo rằng chuỗi "\ 8" không được nhận dạng.
· "__SUB__" hiện hoạt động trong các khối đặc biệt ("BEGIN", "END", v.v.).
· Tạo luồng trên Windows về mặt lý thuyết có thể dẫn đến sự cố nếu được thực hiện bên trong
Khối "BEGIN". Nó vẫn không hoạt động bình thường, nhưng nó không còn bị treo nữa [perl
# 111610].
· "\ & {''}" (Với chuỗi trống) giờ đây sẽ tự động xác minh một sơ khai giống như bất kỳ tên phụ nào khác và
không còn tạo ra lỗi "Không thể tạo phụ" [perl # 94476].
· Một hồi quy được giới thiệu trong v5.14.0 đã được sửa, trong đó một số lệnh gọi đến "re"
mô-đun sẽ làm tắc nghẽn $ _ [perl # 113750].
· "Do FILE" bây giờ luôn đặt hoặc xóa $ @, ngay cả khi không thể đọc tệp. Điều này
đảm bảo rằng thử nghiệm $ @ đầu tiên (theo khuyến nghị của tài liệu) luôn trả về
kết quả chính xác.
· Trình lặp mảng được sử dụng cho cấu trúc "each @array" hiện được đặt lại chính xác khi
@array bị xóa [perl # 75596]. Điều này xảy ra, ví dụ, khi mảng là toàn cục
được gán cho, như trong "@array = (...)", nhưng không phải khi giá trị được chỉ định cho. Về
của XS API, điều đó có nghĩa là "av_clear ()" bây giờ sẽ đặt lại trình vòng lặp.
Điều này phản ánh hành vi của trình lặp băm khi băm bị xóa.
· "$ Class-> can", "$ class-> isa" và "$ class-> DOES" hiện trả về kết quả chính xác,
bất kể gói đó được tham chiếu bởi $ class có tồn tại hay không [perl # 47113].
· Tín hiệu đến không còn rõ ràng $ @ [perl # 45173].
· Cho phép khai báo "my ()" với danh sách biến trống [perl # 113554].
· Trong quá trình phân tích cú pháp, các sub được khai báo sau khi lỗi không còn để lại sơ khai [perl # 113712].
· Các đóng cửa không chứa chuỗi trốn tránh không còn bám vào các chương trình con có chứa của chúng nữa,
cho phép các biến bị đóng bởi chương trình con bên ngoài được giải phóng khi chương trình con bên ngoài
được giải phóng, ngay cả khi phụ bên trong vẫn tồn tại [perl # 89544].
· Đã dừng sao chép các bộ xử lý tệp trong bộ nhớ bằng cách mở bằng chế độ "<& =" hoặc "> & ="
hoạt động bình thường trong v5.16.0. Nó đã làm cho tay cầm mới tham chiếu đến một
biến vô hướng. Điều này đã được sửa [perl # 113764].
· Biểu thức "qr //" không còn gặp sự cố với các công cụ biểu thức chính quy tùy chỉnh không
đặt "off" tại thời gian biên dịch biểu thức chính quy [perl # 112962].
· "Xóa cục bộ" không còn gặp sự cố với một số mảng và hàm băm ma thuật [perl
# 112966].
· "Cục bộ" trên các phần tử của một số mảng ma thuật và hàm băm nhất định không được sử dụng để sắp xếp để có
phần tử bị xóa khi thoát khỏi phạm vi, ngay cả khi phần tử không tồn tại trước "cục bộ".
· "Vô hướng (ghi)" không còn trả về nhiều mục [perl # 73690].
· Chuyển đổi chuỗi thành dấu phẩy động không còn phân tích sai chuỗi nhất định trong "sử dụng
ngôn ngữ "[perl # 109318].
· Bộ lọc @INC chết không còn rò rỉ bộ nhớ [perl # 92252].
· Việc triển khai các hoạt động quá tải bây giờ được gọi trong ngữ cảnh chính xác.
Điều này cho phép, trong số những thứ khác, có thể ghi đè đúng cách "<>" [perl # 47119].
· Chỉ chỉ định khóa "dự phòng" khi gọi "sử dụng quá tải" hiện hoạt động đúng
[perl # 113010].
· "Sub foo {my $ a = 0; while ($ a) {...}}" và "sub foo {while (0) {...}}" ngay bây giờ
trả về điều tương tự [perl # 73618].
· Phủ định chuỗi bây giờ hoạt động giống nhau trong "use integer;" như nó không có [perl
# 113012].
· "Chr" bây giờ trả về ký tự thay thế Unicode (U + FFFD) cho -1, bất kể
đại diện nội bộ. -1 được sử dụng để bọc nếu đối số bị ràng buộc hoặc một chuỗi
nội bộ
· Việc sử dụng "định dạng" sau khi giải phóng phụ kèm theo của nó có thể bị lỗi kể từ phiên bản perl v5.12.0, nếu
định dạng các biến từ vựng được tham chiếu từ phần bên ngoài.
· Sử dụng một "định dạng" sau khi phụ bao quanh nó không được xác định có thể bị lỗi kể từ perl v5.10.0,
nếu định dạng tham chiếu đến các biến từ vựng từ con bên ngoài.
· Sử dụng một "định dạng" được xác định bên trong một bao đóng, định dạng này tham chiếu đến các biến từ vựng
từ bên ngoài, không bao giờ thực sự hoạt động trừ khi lệnh gọi "ghi" trực tiếp bên trong
Khép kín. Trong v5.10.0, nó thậm chí còn bắt đầu gặp sự cố. Bây giờ là bản sao của việc đóng cửa gần nhất
phần trên cùng của ngăn xếp cuộc gọi được sử dụng để tìm các biến đó.
· Các định dạng đóng trên các biến trong các khối đặc biệt không còn bị treo nếu tồn tại sơ khai
trùng tên với khối đặc biệt trước khi khối đặc biệt được biên dịch.
· Trình phân tích cú pháp không còn bị nhầm lẫn, coi "eval foo ()" là một lỗi cú pháp nếu
đứng trước "print;" [perl # 16249].
· Giá trị trả về của "syscall" không còn bị cắt ngắn trên nền tảng 64-bit [perl
# 113980].
· Việc gấp liên tục không còn khiến "print 1? FOO: BAR" in vào tay cầm FOO
[perl # 78064].
· "Do subname" bây giờ gọi chương trình con được đặt tên và sử dụng tên tệp mà nó trả về, thay vào đó
mở một tệp có tên "subname".
· Các chương trình con được tra cứu bởi rv2cv các móc kiểm tra (được đăng ký bởi các mô-đun XS) hiện đã được thực hiện
cân nhắc khi xác định xem "foo bar" có phải là lệnh gọi phụ hay không
"foo (bar)" hoặc phương thức gọi "" bar "-> foo".
· "CORE :: foo :: bar" không còn được xử lý đặc biệt nữa, cho phép ghi đè toàn cục
được gọi trực tiếp qua "CORE :: GLOBAL :: uc (...)" [perl # 113016].
· Gọi một sub chưa xác định có typeglob chưa được xác định bây giờ tạo ra thông lệ
Lỗi "Chương trình con không xác định được gọi là", thay vì "Không phải là tham chiếu CODE".
· Hai lỗi liên quan đến @ISA đã được sửa. "* ISA = * global_without_array" và "undef
*LÀ MỘT; @ {* ISA} "sẽ ngăn các sửa đổi trong tương lai đối với @ISA cập nhật nội bộ
bộ nhớ đệm dùng để tra cứu các phương thức. Trường hợp * global_without_array là một hồi quy từ
Perl v5.12.
· Việc tối ưu hóa biểu thức chính quy đôi khi khiến "$" với "/ m" không tạo ra được hoặc
đối sánh không chính xác [perl # 114068].
· "__SUB__" hiện hoạt động trong một khối "sắp xếp" khi chương trình con đi kèm được khai báo trước
với "sub foo;" cú pháp [perl # 113710].
· Thuộc tính Unicode chỉ áp dụng cho các điểm mã Unicode, điều này dẫn đến một số điều thiếu tinh tế
khi các biểu thức chính quy được so khớp với các điểm mã Unicode trên. Đây là một
cảnh báo được tạo ra để thu hút sự chú ý của bạn đến điều này. Tuy nhiên, cảnh báo này đã được
được tạo không thích hợp trong một số trường hợp, chẳng hạn như khi một chương trình đang được phân tích cú pháp.
Các kết quả không phải Unicode như "\ w" và "[: word:]" sẽ không tạo ra cảnh báo, vì
các định nghĩa của chúng không giới hạn chúng chỉ áp dụng cho các điểm mã Unicode. Bây giờ
thông báo chỉ được tạo khi đối sánh với "\ p {}" và "\ P {}". Vẫn còn một
lỗi, [perl # 114148], đối với rất ít thuộc tính trong Unicode chỉ khớp với một
điểm mã. Cảnh báo không được tạo nếu chúng được khớp với mã Unicode trên
điểm mã.
· Cảnh báo chưa được khởi tạo đề cập đến các phần tử băm sẽ chỉ đề cập đến tên phần tử nếu
nó không nằm trong nhóm đầu tiên của hàm băm, do lỗi từng người một.
· Một lỗi trình tối ưu hóa biểu thức chính quy có thể khiến nhiều dòng "^" hoạt động không chính xác trong
sự hiện diện của các dấu ngắt dòng, sao cho "" / \ n \ n "= ~ m # \ A (?: ^ / $) # im" sẽ không khớp
[perl # 115242].
· Không thành công "fork" trong ngữ cảnh danh sách không còn làm hỏng ngăn xếp. "@a = (1, 2, ngã ba, 3)"
được sử dụng để nuốt 2 và gán "(1, undef, 3)" nếu lệnh gọi "fork" không thành công.
· Nhiều lỗi rò rỉ bộ nhớ đã được khắc phục, chủ yếu liên quan đến các biến bị ràng buộc chết,
các lớp ký tự biểu thức chính quy và các khối mã, và các lỗi cú pháp.
· Gán một biểu thức chính quy ("$ {qr //}") cho một biến xảy ra để giữ một
số dấu phẩy động không còn gây ra lỗi xác nhận trên các bản dựng gỡ lỗi.
· Việc gán một biểu thức chính quy cho một đại lượng vô hướng chứa một số không còn gây ra
đánh số tiếp theo để tạo ra các số ngẫu nhiên.
· Việc gán một biểu thức chính quy cho một biến ma thuật không còn xóa bỏ điều kỳ diệu nữa.
Đây là một hồi quy từ v5.10.
· Việc gán một biểu thức chính quy cho một đại lượng vô hướng phù hợp không còn dẫn đến sự cố. Điều này
cũng là một hồi quy từ v5.10.
· Biểu thức chính quy hiện có thể được gán cho các phần tử băm và mảng được gắn với tính năng làm phẳng
thành chuỗi.
· Việc kích hoạt một biểu thức chính quy không còn dẫn đến một cảnh báo chưa được khởi tạo.
· Các chỉ số mảng âm không còn khiến các phương thức TỒN TẠI của các biến bị ràng buộc bị bỏ qua.
Đây là một hồi quy từ v5.12.
· Các chỉ số mảng âm không còn dẫn đến sự cố trên các mảng gắn với không phải đối tượng.
· "$ Byte_overload. = $ Utf8" không còn dẫn đến UTF-8 được mã hóa kép nếu bên trái
vô hướng đã tạo ra một chuỗi UTF-8 trong lần gọi quá tải gần đây nhất.
· "Goto & sub" hiện sử dụng giá trị hiện tại của @_, thay vì sử dụng mảng
chương trình con ban đầu được gọi với. Điều này có nghĩa là "local @_ = (...); goto & sub" bây giờ
hoạt động [perl # 43077].
· Nếu một trình gỡ lỗi được gọi một cách đệ quy, nó không còn dựa trên từ vựng của chính nó nữa
biến. Trước đây dưới đệ quy tất cả các lệnh gọi sẽ chia sẻ cùng một bộ từ vựng
biến [perl # 115742].
· * _ {ARRAY} được trả về từ một chương trình con không còn tự nhiên trở nên trống.
· Khi sử dụng "say" để in vào một bộ xử lý tệp bị ràng buộc, giá trị của "$ \" là chính xác
được bản địa hóa, ngay cả khi trước đó nó là undef. [perl # 119927]
Được biết Vấn đề
· Các chuỗi được gắn cờ UTF8 trong% ENV trên HP-UX 11.00 bị lỗi
Sự tương tác của các chuỗi được gắn cờ UTF8 và% ENV trên HP-UX 11.00 hiện đang bị hạn chế
một số cách chưa được chẩn đoán đầy đủ. Mong đợi các lỗi kiểm tra trong t / op / magic.t, theo dõi bởi
hành vi không xác định khi lưu trữ các ký tự rộng trong môi trường.
cáo phó
Hojung Yoon (AMORETTE), 24 tuổi, ở Seoul, Hàn Quốc, đã đi nghỉ dài ngày vào ngày 8 tháng 2013 năm XNUMX
với bức tượng llama và thẻ TIMTOADY có chữ ký. Anh ấy là một Perl 5 & 6 trẻ tuổi xuất sắc
hacker và một thành viên tận tụy của Seoul.pm. Anh ấy đã lập trình Perl, nói chuyện với Perl, ăn Perl, và
yêu Perl. Chúng tôi tin rằng anh ấy vẫn đang lập trình ở Perl với chiếc máy tính xách tay IBM bị hỏng của mình
một vài nơi. Ông sẽ được bỏ qua.
Lời cảm ơn
Perl v5.18.0 đại diện cho khoảng 12 tháng phát triển kể từ Perl v5.16.0 và
chứa khoảng 400,000 dòng thay đổi trên 2,100 tệp từ 113 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 v5.18.0:
Aaron Crane, Aaron Trevena, Abhijit Menon-Sen, Adrian M. Enache, Alan Haggai Alavi,
Alexandr Ciornii, Andrew Tam, Andy Dougherty, Anton Nikishaev, Aristotle Pagaltzis,
Augustina Blair, Bob Ernst, Brad Gilbert, Breno G. de Oliveira, Brian Carlson, Brian
Fraser, Charlie Gonzalez, Chip Salzenberg, Chris 'BinGOs' Williams, Christian Hansen,
Colin Kuskie, Craig A. Berry, Dagfinn Ilmari Mannsaaker, Daniel Dragan, Daniel Perrett,
Darin McBride, Dave Rolsky, David Golden, David Leadbeater, David Mitchell, David Nicol,
Dominic Hargreaves, E. Choroba, Eric Brine, Evan Miller, Cha Chrysostomos, Florian
Ragwitz, Francois Perrad, George Greer, Goro Fuji, H.Merijn Brand, Herbert Breunung, Hugo
van der Sanden, Igor Zaytsev, James E Keenan, Jan Dubois, Jasmine Ahuja, Jerry D. Hedden,
Jess Robinson, Jesse Luehrs, Joaquin Ferrero, Joel Berger, John Goodyear, John Peacock,
Karen Etheridge, Karl Williamson, Karthik Rajagopalan, Kent Fredric, Leon Timmermans,
Lucas Holt, Lukas Mai, Marcus Holland-Moritz, Markus Jansen, Martin Hasch, Matthew
Horsfall,Max Maischein,Michael G Schwern,Michael Schroeder,Moritz Lenz,Nicholas
Clark, Niko Tyni, Oleg Nesterov, Patrik Haegglund, Paul Green, Paul Johnson, Paul
Marquess, Peter Martini, Rafael Garcia-Suarez, Reini Urban, Renee Baecker, Rhesa
Rozendaal, Ricardo Signes, Robin Barker, Ronald J. Kimball, Ruslan Zakirov, Salvador
Fandin ~ o, Sawyer X, Scott Lanning, Sergey Alekseev, Shawn M Moore, Shirakata Kentaro,
Cá Shlomi, Sisyphus, Smylers, Steffen Mueller, Steve Hay, Steve Peters, Steven
Schubiger, Sullivan Beck, Sven Strickroth, Sebastien Aperghis-Tramoni, Thomas Sibley,
Tobias LeichTom WyantTony CookVadim KonovalovVincent PitVolker SchatzWalt
Mankowski, Yves Orton, Zefram.
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ại http://rt.perl.org/perlbug/ .
Cũng có thể có thông tin tại http://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
về các vấn đề, tìm ra giải pháp và giúp điều phối việc 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ợ. Làm ơn chỉ
sử dụng địa chỉ này cho các vấn đề bảo mật trong lõi Perl, không cho các mô-đun một cách độc lập
được phân phối trên CPAN.
Sử dụng perl5180delta trực tuyến bằng các dịch vụ onworks.net