Một trong những sự không tương thích có chủ ý lớn nhất là nội suy mảng thay đổi giữa Perl 4 và Perl 5.
my @example = qw(1 2 3);
print "[email protected]";
Trong Perl 4 mà sẽ là:
[email protected]
Trong Perl 5 đó sẽ là:
foo1 2 3.com
May mắn thay, nếu mảng không tồn tại Perl sẽ cảnh báo bạn về " nội suy không mong muốn có thể xảy ra ".
Chủ đề trải qua một thay đổi lớn từ 5,005 đến 5,6. "Chủ đề 5005" đã sử dụng mô hình luồng POSIX truyền thống, nơi tất cả dữ liệu chung được chia sẻ. Mặc dù lý thuyết này nhanh hơn, bởi vì sau đó Perl chỉ có thể sử dụng các chủ đề POSIX, đó là một cơn ác mộng đối với các lập trình viên Perl. Hầu hết các mô-đun Perl đều không an toàn. Và nó không bao giờ thực sự hiệu quả.
Trong 5.6, ActiveState và những người khác đã thực hiện fork() trên Windows. Khi bạn fork() trên Windows, Perl sẽ tạo một bản sao của đối tượng thông dịch viên và chạy các opcodes của cả hai trình thông dịch. Điều này được gọi là "đa dạng".
Trong 5.8, Arthur Bergman đã chạy với điều đó và sử dụng nó để tạo ithreads. Bởi vì đa dạng là mô phỏng một quá trình riêng biệt, không có dữ liệu được chia sẻ theo mặc định. Chỉ có dữ liệu bạn nói được chia sẻ mới được chia sẻ. Điều này làm cho chúng an toàn hơn nhiều để sử dụng, mặc dù phải mất một thời gian dài trước khi nó được ổn định. Những người như Elizabeth Mattijsen và Jerry Hedden đã làm điều đó.
5005threads cuối cùng đã bị xóa trong 5.10.0. Một lớp tương thích tồn tại, nhưng tôi nghi ngờ nó sẽ thực sự làm việc trong mã sản xuất.
Một sự không tương thích lớn khác đã tạo ra Unicode giữa 5,6 và 5,8. Unicode trong 5.6 thổi. Có hay không một chuỗi Unicode được quyết định bởi phạm vi xung quanh. Nó đã được thiết kế lại hoàn toàn trong 5.8 nên bây giờ Unicodeiness của một chuỗi được gắn với chuỗi. Mã được viết bằng mã Unicode 5.6 thường phải được viết lại trong 5.8, thường vì để có được mã Unicode của 5.6 để hoạt động ngay, bạn phải thực hiện các hacks xấu xí.
Gần đây, 5.10.1 đã thực hiện một loạt các thay đổi không tương thích với đối sánh thông minh. May mắn là họ đã được giới thiệu trong 5.10.0 vì vậy nó không phải là một việc lớn. Câu chuyện có Perl 6 đã giới thiệu khái niệm phù hợp thông minh, và nó đã được chuyển thành phiên bản phát triển của Perl 5. Thời gian trôi qua, và ý tưởng của Perl 6 về sự kết hợp thông minh đã thay đổi. Không ai nói với các chàng trai Perl 5 và nó đã đi ra trong 5.10.0 không thay đổi. Larry Wall noticed and did the equivalent of OMG YER DOIN IT WRONG!!! Phiên bản Perl 6 mới được xem là tốt hơn đáng kể và vì vậy 5.10.1 đã sửa nó.
Bạn đánh bại tôi. Tôi sắp tuyên bố băm giả. :-) –
Nó chỉ nhỏ nếu bạn có thể quản lý để dạy tất cả các dev trong công ty của bạn không tham chiếu các trường pseudohash như '$ this -> [$ this -> [0] -> {fieldname}]'. Sigh ... – Ether
Băm giả luôn được gắn nhãn một thử nghiệm. Không phải lỗi của tôi nếu bạn sử dụng chúng trong mã sản xuất. : P – Schwern