Я лучше знаю Perl, так что я выберу его.
Perl перепробовал много идей. Некоторые были хорошими. Некоторые были плохими. Некоторые были оригинальными и не были скопированы по уважительной причине.
Одним из них является идея контекста - каждый вызов функции происходит в списке или скалярном контексте и может делать совершенно разные вещи в каждом контексте. Как я указал на http://use.perl.org/~btilly/journal/36756, это усложняет каждый API и часто приводит к тонким проблемам проектирования в коде Perl.
Следующим является идея связать синтаксис и типы данных так полностью. Это привело к изобретению связи, позволяющей объектам маскироваться под другие типы данных. (Вы также можете добиться того же эффекта, используя перегрузку, но связывание является более распространенным подходом в Perl.)
Другая распространенная ошибка, допущенная многими языками, состоит в том, чтобы начать предлагать скорее динамическую область видимости, чем лексическую. Позже трудно отменить это дизайнерское решение, что приводит к длительным бородавкам. Классическое описание этих бородавок в Perl: http://perl.plover.com/FAQs/Namespaces.html . Обратите внимание, что это было написано до того, как Perl добавил our
переменные и static
переменные.
Люди на законных основаниях не согласны со статической и динамической типизацией. Мне лично нравится динамический набор текста. Однако важно иметь достаточную структуру, чтобы опечатки могли быть обнаружены. Perl 5 хорошо справляется с этой задачей. Но Perl 1-4 понял это неправильно. В некоторых других языках есть контролеры пуха, которые делают то же самое, что и строгий. До тех пор, пока вы хорошо справляетесь с проверкой ворса, это приемлемо.
Если вы ищете больше плохих идей (их много), изучите PHP и изучите его историю. Моя любимая ошибка в прошлом (давно исправленная, поскольку она приводила к множеству дыр в безопасности) по умолчанию позволяла кому-либо устанавливать любую переменную путем передачи параметров формы. Но это далеко не единственная ошибка.