Zum Thema funktionale Programmierung in Perl könnte man anführen, dass die Sprache wichtige Basiselemente bietet um diesen Stil zu unterstützen: Es gibt Subroutinenreferenzen, also Funktionen als Werte wie jedes andere Datenobjekt, es gibt anonyme Subroutinen, die lexikalische Closures bilden, und es gibt grundlegende Funktionen höherer Ordnung wie
map,
grep in der Standardbibliothek,
reduce in
List::Util und einiges mehr in
List::MoreUtils.
Andererseits ist Perl natürlich nicht seiteneffektfrei, also keinesfalls pur funktional, aber das sind andere Sprachen, die klassisch als funktional angesehen werden, auch nicht (z.B. OCaml, SML, Scheme).
Was Logikprogrammierung betrifft, so hindert einen natürlich niemand daran, in Perl einen SAT-Solver oder einen generelleren Constraintsolver zu programmieren. Da Perl Tailcalls unterstützt, lässt sich Backtracking leicht, wenn auch nicht sehr praktisch, mit Hilfe von CPS-Transformationen implementieren. Abgesehen davon gibt es zum Beispiel das Modul
Quantum::Superpositions, welches zwar einen gänzlich anderen Ansatz als eine Sprache wie Prolog verfolgt, sich aber besser in den Kontext einer prozeduralen Sprache einfügt und einige Probleme, für die Logikprogrammierung gut geeignet wäre, ähnlich elegant lösen kann.
Abschließend sollte man vielleicht noch anmerken, dass Perls Engine für reguläre Ausdrücke natürlich auch einen Constraintsolver darstellt.
When C++ is your hammer, every problem looks like your thumb.