На этой странице я хочу собрать побольше доказательств, вызванных как собственным наступлением на грабли, так и чужим, того, что перл не годится для использования в новых проектах. Как подметил покойный Эрик Наггум, перл — это такой удобный инструмент для блестящего решения проблем, которые он же сам и создает.
Dualvar'ы возникли в воспаленном воображении. Скаляр, оказывается, может содержать строковое и числовое значение одновременно. Мало того, они не связаны между собой. И молитесь, чтобы контекст был использован правильно.
Это особенно касается кодирования в JSON. У модуля JSON.pm особые, ни в одном другом языке не встречающиеся, проблемы с определением, считать данный скаляр числом или строкой. JSON.pm использует для этого последний использованный переменной контекст, что является, конечно же, очень предсказуемым поведением.
Особенно же оно предсказуемо, когда источником данных является выхлоп базы данных. Все скаляры, выдаваемые DBI, трактуются как строки. Клиентское приложение, ожидающее, например, целые числа, офигевает от полученного.
Что характерно, такой проблемы нет даже у PHP. Там свои заморочки с неявным преобразованием типов, но всегда можно сказать однозначно, является ли вот эта переменная числом или строкой.
Меня очень беспокоит, что у Perl напрочь отсутствуют альтернативные реализации (да хоть на том же RPython + PyPy, может, оно бы перестало тормозить) и формальное определение языка. Для PHP формальное определение языка отсутствует, но одни ребята пилят де-факто HipHop, другие — трассирующий JIT на том же PyPy, и мне кажется, формальное описание языка таки родится под их давлением.
Еще я более чем уверен, что если язык определяется сугубо реализацией, то сколько бы ему ни было лет, называть его «зрелым» нельзя.
У перла есть очень много переменных (в частности, односимвольные), которые по умолчанию глобальны во всех областях видимости. Локальную видимость нужно задавать явно всегда, используете вы strict или нет. По умолчанию же (если strict не использовать) переменные глобальны.
Это еще пример в копилку случаев, когда вещи, которые лучше бы имели неявное умолчание, в перле нужно всегда указывать явно, и наоборот.
Поди догадайся, что значат термины poetry, croak, cluck, confess. Зато как оригинально, неправда ли?