2009-06-09 11 views
7

Gibt es eine Möglichkeit, Perl-Code auszuführen, ohne Runtime.getRuntime.exec ("...") zu verwenden; (parse in Java App)?Include Perl in Java

Antwort

5

fragen Ich habe mich in dieses kürzlich suchen. Die vielversprechendste Sache, die ich bis jetzt gefunden habe, ist das Inline::Java Modul auf CPAN. Es ermöglicht den Aufruf von Java aus Perl, aber auch (über einige enthaltene Java-Klassen) den Aufruf von Perl aus Java.

+2

bist du dir sicher: ** kannst du das Gegenteil tun: perl von Java ** anzurufen, ist es zuverlässig in mission critical stuff? – FutuToad

0

Nein, ich glaube nicht, dass das existiert. Während es mehrere Sprachen in die JVM portiert hat (JRuby, Jython etc.) ist Perl noch keiner von denen.

1

Ich hätte schwören können, es war einfach wie Kuchen mit der Java Scripting API.
Aber es ist offenbar nicht auf der Liste der vorhandenen Implementierungen ...

Also, vielleicht hilft dies statt: java and perl
edit: ich sagte "vielleicht"

+2

Der JPL ist tot. Benutze es nicht. Inline :: Java ist der Weg zu gehen. – daotoad

0

In Zukunft wird der Standard für die Verwendung einer Skriptsprache über den in JSR 223 eingeführten Java Scripting Support verwendet. Eine Liste der derzeit unterstützten Skriptsprachen finden Sie unter scripting project homepage. Leider ist Perl nicht dort noch :-(

2

Inline::Perl ist die akzeptierte Art und Weise. Aber es gibt auch Jerl, die aus einer JAR ausgeführt werden können.

Hier an example ohne den VM-Wrapper zu verwenden (was nicht so ist . fun)

Hier einige Beispiele, die die jerlWrapper-Klasse es einfacher, den Code zu machen:

import jerlWrapper.perlVM; 

public final class HelloWorld { 

    /* keeping it simple */ 
    private static String helloWorldPerl = "print 'Hello World '.$].\"\n\";"; 

    public static void main(String[] args) { 
     perlVM helloJavaPerl = new perlVM(helloWorldPerl); 
     helloJavaPerl.run(); 
    } 
} 

oder

import jerlWrapper.perlVM; 

public final class TimeTest { 

    /* The (ugly) way to retrieve time within perl, with all the 
    * extra addition to make it worth reading afterwards. 
    */ 
    private static String testProggie = new String(
      "my ($sec, $min, $hr, $day, $mon, $year) = localtime;"+ 
      "printf(\"%02d/%02d/%04d %02d:%02d:%02d\n\", "+ 
      "  $mon, $day + 1, 1900 + $year, $hr, $min, $sec);" 
    ); 

    public static void main(String[] args) { 
     perlVM helloJavaPerl = new perlVM(testProggie);  
     boolean isSuccessful = helloJavaPerl.run(); 
     if (isSuccessful) { 
      System.out.print(helloJavaPerl.getOutput()); 
     } 
    } 
} 
+0

Jerl für Perl5 wird veraltet. Rakudo Perl hat VM-Optionen für die Zukunft: http://en.wikipedia.org/wiki/Rakudo_Perl_6 – michaelt

+0

Jerl für Perl5 ist in der Tat veraltet. Während das Projekt 2 Jahre stabil war, gibt es bessere Virtualisierungsoptionen. – michaelt