PyPerler ist ein Python-Package mit dem es möglich ist, Perl-Code
unter Python zu nutzen. Es wird vom Autor nach eigener Aussage zur
Zeit nicht gepflegt, funktioniert aber recht gut (Einschränkungen
siehe unten). Es lassen sich damit sogar komplexe Perl-Klassen unter
Python verwenden, wie z.B. Datenbank-Operationen über einen
O/R-Mapper. Ich experimentiere zur Zeit damit unter Debian 10 mit
Python 3.7.3 und Perl 5.28.1.
Installation
Wir setzen zunächt eine virtuelle Umgebung auf, in die wir PyPerler
installieren:
$ virtualenv venv
$ . venv/bin/activate
Wir holen den Sourcecode von GitHub:
$ git clone https://github.com/tkluck/pyperler.git
Wir kompilieren den Code und installieren PyPerler in die virtuelle Umgebung:
$ cd pyperler
$ make
$ make install
Nun können wir Perl-Code von Python aus nutzen. Ein Beispiel
findet sich im README.
Probleme
Operatoren sind nicht vollständig überladen
Die Operator-Methoden __radd__(), __rmul__() usw. fehlen in Klasse
ScalarValue, so dass unter o.g. Python-Version ein Perl-Skalar ohne
explizite Typwandlung zwar linksseitig mit einem Python-Objekt
verknüpft werden kann, aber nicht rechtsseitig. Diese Definitionen
lassen sich relativ einfach nachtragen. Als Richtschnur kann
genutzt werden, das die Defizite aufzeigt.
Die Extension ist nicht thread-save
Pyperler ist offenbar nicht thread-save. Eine Flask-Anwendung muss mit
$ flask run --without-threads
gestartet werden, sonst stürzt sie mit einem Segmentation Fault beim
ersten Zugriff auf ein Perl-Objekt ab. Dies hat möglicherweise mit
einem Fehler bei der Nutzung von Cythons Global Interpreter Lock (GIL)
zu tun.
Links