Perls Philosophie ist in der Regel die, "das zu tun, was jetzt praktisch ist". Wenn Sie OOP verwenden müssen, ist es da. Es ist nicht in allen Lösungen erforderlich, eine Person zum Schreiben von OOP-Code zu zwingen, wenn es sich um ein einfaches Problem vom Typ "Tun Sie dies, dann dies, dann" handelt, das häufig kontraproduktiv ist.
Die Multi-Paradigmen-Natur von Perl kann in Dingen wie der Schwartzschen Transformation gesehen werden, die sehr funktionale Aspekte hat (in Lisp ist es als "dekorieren-sortieren-undekorieren" bekannt). OOP existiert ebenso wie prozedurale (C wie Programmierung) und imperative (Bash wie "mach das dann das").
Entwurfsmuster sind wiederkehrende Lösungen für häufig auftretende Probleme. Sie existieren in jeder Sprache. Manchmal werden diese Muster Redewendungen genannt, obwohl dies auch auf Dinge verweisen kann, die viel einfacher sind als ein Muster.
Bei Bedarf können viele der klassischen GOF-Entwurfsmuster in Perl implementiert werden. Perl Design Patterns haben viele gebräuchliche Namen, die mit dem GOF vertraut sind. Es ist nicht notwendig, dass alle von ihnen idiomatische Perl sind.
Beachten Sie beim Erkunden von Designmustern in Perl auch "Design Patterns" von Mark Dominus .
Viele halten die Entwurfsmuster für Sprachmängel . In dieser Perspektive sind Entwurfsmuster wie der Iterator in Perl oft nicht erforderlich. Nicht immer - aber oft.
Schreiben Sie zuerst idiomatisches Perl. Versuchen Sie nicht, C in Perl oder Lisp in Perl oder Java in Perl zu schreiben. Perl ist Perl. Wenn es ein Problem gibt, das größer wird, als es das idiomatische Perl bewältigen kann, und Sie komplexere Klassenstrukturen benötigen, schreiben Sie diese. Kennen Sie die Entwurfsmuster, um erkennen zu können, dass "dieses Problem inzwischen so weit fortgeschritten ist, dass eine abstrakte Fabrik benötigt wird" - aber versuchen Sie nicht, eine abstrakte Fabrik in Perl zu erstellen, wenn Sie keine benötigen.
Einige Bibliotheken existieren sowohl in OOP- als auch in traditionelleren Formen. Siehe Soll ich die funktionsorientierten oder objektorientierten CGI-Schnittstellen verwenden? für eine alte SO-Frage, bei der man fragt, wie man die Bibliothek benutzt.