2009-06-09 110 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