如何从Java调用Perl?

我有一个我想在Java中使用的Perl模块。 有没有办法使用Windows上的ActiveState Perl或Linux附带的通用Perl来调用此代码? 我找到了对JPL的引用,但它似乎不再被维护了。

Inline-Java是从Perl调用java的常用库,这篇文章提出了一个org.perl.java模块,该模块应该允许从Java调用Perl。

但是,由于JNI实现对不同JVM的不可预测性,很难说JVM和Perl的组合将起作用。 通常,需要的是具有MULTIPLICITY的Perl和编译的线程。这意味着他使用自定义构建的Perl。

否则, Inline :: Java :: Callback允许您从Java调用Perl函数。 为此,您需要创建一个org.perl.inline.java.InlinePerlCaller对象。 以下是典型用法的示例:

 use Inline Java => <match("Inline::Java", "^Inline") ; print($match . "n") ; # prints 1 sub regexp { my $target = shift ; my $pattern = shift ; return ($target =~ /$pattern/) ; } 

这不是Runtime.exec()的用途吗?

 Runtime.getRuntime().exec("/usr/bin/perl myPerl.pl"); 

或者我误解了这个问题?

我有点使用Inline :: Java,发现它有点繁琐,如果我有时间,我可能会重新实现使用Web服务并以这种方式调用perl代码。

Sleep是一种脚本语言,具有在JVM中运行的解释器。 根据我的理解,睡眠语言基本上是Perl的一些扩展。 您的代码可能能够在Sleep中运行。 如果是,您可以实例化解释器,运行代码并检索结果。

Rakudo允许您在JVM中运行Perl6,并且有一个Perl5附加组件允许您运行大多数旧代码,当然没有XS。 还有JERL在JVM中运行当前的microperl 。 这很大程度上取决于你想要做什么,但那些值得一试。

我发现了Robert Lawson在JavaWorld上的一个实现,它使用XML-RPC从Java代码中调用Perl例程:从Java调用Perl例程

我知道这是旧的,但我最近遇到了同样的需求。 我发现JPerl比Inline::Java::PerlInterpreter更方便。

猜猜这真的取决于你的perl代码是什么,以及你想要做什么..

如果只是使用exec()太简单了,那么像gearman这样的东西可能会有所帮助

我不知道它会有多稳定,或者维护得多好,所以,另一种选择是编写一个脚本来执行你的应用程序需要的东西,然后从Java执行该脚本。 不是最优雅的方式,但它的工作原理。