Ich kenne Perl am besten, also werde ich mich darum kümmern.
Perl hat viele Ideen ausprobiert. Einige waren gut. Einige waren schlecht. Einige waren original und aus gutem Grund nicht weit verbreitet.
Eine davon ist die Idee des Kontexts - jeder Funktionsaufruf findet in einem Listen- oder Skalarkontext statt und kann in jedem Kontext ganz andere Dinge tun. Wie ich unter http://use.perl.org/~btilly/journal/36756 ausgeführt habe, erschwert dies jede API und führt häufig zu subtilen Designproblemen in Perl-Code.
Das nächste ist die Idee, Syntax und Datentypen so vollständig zu verknüpfen. Dies führte zur Erfindung der Bindung, damit sich Objekte als andere Datentypen tarnen können. (Sie können den gleichen Effekt auch mit Überladung erzielen, in Perl ist jedoch das Binden der üblichere Ansatz.)
Ein weiterer häufiger Fehler, den viele Sprachen begehen, besteht darin, zunächst dynamisches Scoping und nicht lexikalisches anzubieten. Es ist schwer, diese Designentscheidung später wieder rückgängig zu machen, und dies führt zu lang anhaltenden Warzen. Die klassische Beschreibung dieser Warzen in Perl lautet http://perl.plover.com/FAQs/Namespaces.html . Beachten Sie, dass dies geschrieben wurde, bevor Perl our
Variablen und static
Variablen hinzufügte .
Die Leute sind sich zu Recht nicht einig über statisches oder dynamisches Tippen. Ich persönlich mag dynamisches Tippen. Es ist jedoch wichtig, eine ausreichende Struktur zu haben, damit Tippfehler abgefangen werden können. Perl 5 leistet gute Arbeit mit strict. Aber Perl 1-4 hat das falsch verstanden. Einige andere Sprachen haben Flusenprüfer, die genau das Gleiche tun wie strenge. Solange Sie sich mit der Durchsetzung von Flusenprüfungen auskennen, ist dies akzeptabel.
Wenn Sie mehr schlechte Ideen suchen (viele von ihnen), lernen Sie PHP und studieren Sie seine Geschichte. Mein Lieblingsfehler in der Vergangenheit (der vor langer Zeit behoben wurde, weil er zu so vielen Sicherheitslücken führte) bestand darin, dass jeder durch Übergabe von Formularparametern eine Variable festlegen konnte. Das ist aber alles andere als der einzige Fehler.