Wie Perlroutinen aus Java heraus aufrufen?

21/04/2008 - 16:37 von Marco Neumann | Report spam
Hallo allerseits!

Ich suche eine Möglichkeit, meine Perlroutinen (und das sind viele) aus Java
heraus aufzurufen. Das neue Java 6 bietet zwar die Möglichkeit,
Skriptsprachen mit Java zu kombinieren. Aber leider nicht für Perl. :-(

Python geht aber mit Java 6. Ich hatte schon überlegt, ob man das nutzen
kann, um aus Python heraus Perl aufzurufen, also den Aufruf irgendwie von
dort aus weiterzuleiten. Ich kenne mich mit Python überhaupt nicht aus und
weiß nicht, ob das praktikabel wàre.

Auf CPAN habe ich PLJava gefunden, das aber in der Version 0,04 ist und
nicht unter Linux getestet wurde. Ich arbeite unter Linux. Vielleicht hat
jemand PLJava getestet und für gut befunden, würde mich interessieren.

Ansonsten könnte ich auch ganz unelegant für jede Routine, die ich nutzen
will, ein (Perl) Shellprogramm schreiben, das die Argumente auf der
Kommandozeile entgegennimmt, die Routine aufruft und das Ergebnis dann als
XML aus stdout zurückliefert, um dann in Java geparst zu werden. Das ist
aber nicht elegant.

Hat jemand eine Idee, wie man Perlroutinen aus Java heraus aufruft?

Viele Grüße,
Marco.
 

Lesen sie die antworten

#1 Florian Weimer
21/04/2008 - 20:28 | Warnen spam
* Marco Neumann:

Python geht aber mit Java 6. Ich hatte schon überlegt, ob man das nutzen
kann, um aus Python heraus Perl aufzurufen, also den Aufruf irgendwie von
dort aus weiterzuleiten. Ich kenne mich mit Python überhaupt nicht aus und
weiß nicht, ob das praktikabel wàre.



Bei dem Python wird es sich wohl Jython handeln.

Auf CPAN habe ich PLJava gefunden, das aber in der Version 0,04 ist und
nicht unter Linux getestet wurde. Ich arbeite unter Linux. Vielleicht hat
jemand PLJava getestet und für gut befunden, würde mich interessieren.



Es gibt auch "Java" auf CPAN. Ich hab's aber nicht getestet.

Grundsàtzlich muß man sich überlegen, ob man mit JNI Perl einbetten will
(wobei dann ein Perl-Bug die ganze VM mitnimmt), oder ob man das ganze
über einen Kindprozeß (wohl eher ab Java 6) oder mit Sockets macht (was
Probleme mit der Rechteverwaltung schafft).

Ansonsten könnte ich auch ganz unelegant für jede Routine, die ich nutzen
will, ein (Perl) Shellprogramm schreiben, das die Argumente auf der
Kommandozeile entgegennimmt, die Routine aufruft und das Ergebnis dann als
XML aus stdout zurückliefert, um dann in Java geparst zu werden. Das ist
aber nicht elegant.



Es ist vor allem langsam, wenn das Perl-Skript ein paar ungünstige
use-Anweisungen enthàlt.

Ansonsten gibt es sicherlich auch RPC-Protokolle, die sowohl von Java
als auch Perl implementiert werden.

Ähnliche fragen