Одной из самых больших преднамеренных несовместимостей является интерполяция массивов, которая изменилась между Perl 4 и Perl 5.
my @example = qw(1 2 3);
print "foo@example.com";
В Perl 4 это будет:
foo@example.com
В Perl 5 это будет:
foo1 2 3.com
К счастью, если массив не существует, Perl предупредит вас о «возможной непреднамеренной интерполяции».
Темы претерпели большие изменения между 5.005 и 5.6. «5005 потоков» использовал традиционную модель потоков POSIX, где все глобальные данные являются общими. Хотя теоретически это было быстрее, потому что тогда Perl мог просто использовать потоки POSIX, это был кошмар для кодеров Perl. Большинство модулей Perl не были поточно-ориентированными. И это никогда не получалось.
В 5.6 ActiveState и другие сделали fork () для Windows. Когда вы выполняете fork () в Windows, Perl создает копию объекта интерпретатора и запускает коды операций обоих интерпретаторов. Это было известно как «множественность».
В 5.8 Артур Бергман побежал с этим и использовал его для создания цепочек. Поскольку множественность эмулирует отдельный процесс, данные по умолчанию не передаются. Только данные, о которых вы говорите, являются общими. Это делает их намного безопаснее в использовании, хотя прошло много времени, прежде чем он стал стабильным. Такие люди, как Элизабет Маттийсен и Джерри Хедден, сделали это возможным.
5005 нитей были окончательно удалены в 5.10.0. Уровень совместимости существует, но я сомневаюсь, что он действительно будет работать в рабочем коде.
Другая большая несовместимость возникла в Юникоде между 5.6 и 5.8. Юникод в 5.6 сдул. Независимо от того, была ли строка Unicode, решала окружающая область. Он был полностью переработан в 5.8, так что теперь Unicodeiness строки привязан к строке. Код, написанный с использованием Unicode 5.6, обычно нужно было переписывать в 5.8, часто потому, что для правильной работы Unicode 5.6 вам приходилось делать уродливые хаки.
Недавно 5.10.1 внесла несколько несовместимых изменений в smart-match. К счастью, они были введены в 5.10.0, так что это не имеет большого значения. История о том, что Perl 6 представил концепцию интеллектуального сопоставления, была перенесена в версию Perl 5 для разработки. Прошло время, и идея интеллектуального сопоставления в Perl 6 изменилась. Никто не сказал парням Perl 5, и он вышел в 5.10.0 без изменений. Ларри Уолл заметил и сделал то же самое, что и OMG, да, это НЕПРАВИЛЬНО !!! Новая версия Perl 6 выглядела значительно лучше, и 5.10.1 исправила ее.