2009-06-09 84 views
7

有什麼辦法可以執行perl代碼而不必使用Runtime.getRuntime.exec(「...」); (解析在Java應用程序)?在Perl中包含Perl

回答

5

我最近一直在尋找這個自己。我迄今發現的最有希望的事情是CPAN上的Inline::Java模塊。它允許從Perl調用Java,但也可以(通過一些包含的Java類)從Java調用Perl。

+2

你確定:**你可以做相反的事情:調用Java的perl **,它在任務關鍵的東西中可靠嗎? – FutuToad 2014-01-14 14:53:11

0

不,我不相信這存在。雖然有幾種語言移植到JVM(JRuby,Jython等),但Perl還不是其中之一。

1

我可以發誓使用Java Scripting API作爲餡餅很容易。
但顯然它不是現有實現的名單上...

所以,也許這會有所幫助,而不是: java and perl
編輯:我說, 「也許」

+2

JPL已經死了。不要使用它。 Inline :: Java是要走的路。 – daotoad 2009-06-09 19:22:32

4

Inline::Java提供​​在一個班級。您可以使用它從Java代碼中調用Perl代碼。

Graciliano M. Passos' PLJava也提供了一個嵌入式解釋器。

不要使用JPL(Java Perl Lingo) - 該項目已經死亡,並且已經從現代Perl中刪除。

0

將來,使用任何腳本語言的標準方法是通過JSR 223中引入的java腳本支持。請參閱scripting project homepage以獲取當前支持的腳本語言列表。不幸的是,Perl是不是還存在:-(

2

Inline::Perl是接受的方式。但也有Jerl可以從JAR運行。

這裏的an example不使用VM包裝(這是不是這樣。有趣)

下面是一個使用jerlWrapper類一些例子來更容易地代碼:

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

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 for Perl5已被棄用。 Rakudo perl提供了VM選項:http://en.wikipedia.org/wiki/Rakudo_Perl_6 – michaelt 2015-01-06 22:46:57