2009-06-09 14 views
7

Esiste un modo per eseguire il codice perl senza dover utilizzare Runtime.getRuntime.exec ("..."); (analizzare in app java)?Includi Perl in Java

risposta

5

Ho cercato in questo io stesso di recente. La cosa più promettente che ho trovato finora è il modulo Inline::Java su CPAN. Permette di chiamare Java da Perl ma anche (tramite alcune classi Java incluse) chiamando Perl da Java.

+2

sono sicuro di questo: ** si può fare il contrario: chiama perl da Java **, è affidabile in roba mission critical? – FutuToad

0

No, non credo che questo esista. Mentre ci sono stati diversi porting sulla JVM (JRuby, Jython, ecc.) Perl non è ancora uno di questi.

4

this sembra che quello che stai chiedendo

1

Avrei potuto giurare che era facile come torta utilizzando il Java Scripting API.
Ma a quanto pare non è sulla lista delle implementazioni esistenti ...

Quindi, forse questo aiuta invece: java and perl
edit: ho detto "forse"

+2

Il JPL è morto. Non usarlo Inline :: Java è la strada da percorrere. – daotoad

0

In futuro, il modo standard per utilizzare qualsiasi linguaggio di scripting è tramite il supporto di scripting java introdotto in JSR 223. Vedere lo scripting project homepage per un elenco di linguaggi di script supportati al momento. Purtroppo, Perl non è in là ancora :-(

2

Inline::Perl è il modo accettato. Ma c'è anche Jerl che può essere eseguito da un JAR.

Ecco an example senza utilizzare il wrapper VM (che non è così . divertente)

Ecco alcuni esempi che utilizzano la classe jerlWrapper per rendere più facile per il codice:

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(); 
    } 
} 

o

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 per Perl5 viene deprecato. Rakudo perl ha opzioni VM andando avanti: http://en.wikipedia.org/wiki/Rakudo_Perl_6 – michaelt

+0

Jerl per Perl5 è infatti deprecato. Mentre il progetto è stato stabile per 2 anni +, ci sono opzioni migliori di virtualizzazione. – michaelt