我有一个Perl模块,我想从Java中使用。有没有办法使用Windows上的ActiveState Perl或Linux附带的通用Perl来调用此代码?我找到了对JPL的引用,但似乎不再维护它了。
2nc8po8w1#
Inline-Java是从Perl调用java的常用库,而这个post propose a org.perl.java模块应该允许从Java调用Perl。然而,由于不同JVM的JNI实现的不可预测性,很难说JVM和Perl的什么组合将起作用。通常,所需要的是具有MULTIPLICITY的Perl和编译的线程。这意味着他使用定制的Perl。否则,**Inline::Java::Callback**允许您从Java调用Perl函数。为此,您需要创建一个**org.perl.inline.java.InlinePerlCaller**对象。下面是一个典型用法的示例:
**org.perl.inline.java.InlinePerlCaller**
use Inline Java => <<END ; import java.util.* ; import org.perl.inline.java.* ; class Pod_regexp extends InlineJavaPerlCaller { public Pod_regexp() throws InlineJavaException { } public boolean match(String target, String pattern) throws InlineJavaException { try { String m = (String)CallPerlSub("main::regexp", new Object [] {target, pattern}) ; if (m.equals("1")){ return true ; } } catch (InlineJavaPerlException pe){ // $@ is in pe.GetObject() } return false ; } } END my $re = new Pod_regexp() ; my $match = $re->match("Inline::Java", "^Inline") ; print($match . "n") ; # prints 1 sub regexp { my $target = shift ; my $pattern = shift ; return ($target =~ /$pattern/) ; }
bd1hkmkf2#
这 难道 不是 Runtime.exec ( ) 的 用途 吗 ?
Runtime.getRuntime().exec("/usr/bin/perl myPerl.pl");
中 的 每 一 个还是 我 误解 了 你 的 问题 ?
aelbi1ox3#
Rakudo允许您在JVM中运行Perl6,还有一个Perl5 add-on允许您运行大多数旧代码,当然没有XS。还有一个JERL可以在JVM中运行当前的microperl。这在很大程度上取决于您要做什么,但这些都值得一看。
rlcwz9us4#
我用过一点Inline::Java,发现它有点麻烦,如果我有时间的话,我可能会使用Web服务重新实现,并以这种方式调用Perl代码。
nukf8bse5#
Sleep是一种脚本语言,带有一个在JVM中运行的解释器。据我所知,Sleep语言基本上是Perl加上一些扩展。您的代码可能可以在Sleep中运行。如果可以,您可以示例化解释器,运行代码并检索结果。
iyr7buue6#
我在JavaWorld上找到了Robert Lawson的一个实现,它使用XML-RPC从Java代码中调用Perl例程:Call Perl routines from Java
a11xaf1n7#
我知道这是旧的,但我最近遇到了同样的需求。我发现JPerl比Inline::Java::PerlInterpreter更方便。
Inline::Java::PerlInterpreter
8zzbczxx8#
我想这真的取决于你的Perl代码是什么,以及你想做什么。如果仅仅使用exec()太简单,那么gearman之类的方法可能会有帮助
moiiocjp9#
我不知道它的稳定性如何,也不知道它的维护情况如何,所以,另一个选择是编写一个脚本,完成应用程序所需的任务,然后从Java中执行该脚本。这不是最优雅的方式,但它确实有效。
9条答案
按热度按时间2nc8po8w1#
Inline-Java是从Perl调用java的常用库,而这个post propose a org.perl.java模块应该允许从Java调用Perl。
然而,由于不同JVM的JNI实现的不可预测性,很难说JVM和Perl的什么组合将起作用。通常,所需要的是具有MULTIPLICITY的Perl和编译的线程。这意味着他使用定制的Perl。
否则,**Inline::Java::Callback**允许您从Java调用Perl函数。为此,您需要创建一个
**org.perl.inline.java.InlinePerlCaller**
对象。下面是一个典型用法的示例:bd1hkmkf2#
这 难道 不是 Runtime.exec ( ) 的 用途 吗 ?
中 的 每 一 个
还是 我 误解 了 你 的 问题 ?
aelbi1ox3#
Rakudo允许您在JVM中运行Perl6,还有一个Perl5 add-on允许您运行大多数旧代码,当然没有XS。还有一个JERL可以在JVM中运行当前的microperl。这在很大程度上取决于您要做什么,但这些都值得一看。
rlcwz9us4#
我用过一点Inline::Java,发现它有点麻烦,如果我有时间的话,我可能会使用Web服务重新实现,并以这种方式调用Perl代码。
nukf8bse5#
Sleep是一种脚本语言,带有一个在JVM中运行的解释器。据我所知,Sleep语言基本上是Perl加上一些扩展。您的代码可能可以在Sleep中运行。如果可以,您可以示例化解释器,运行代码并检索结果。
iyr7buue6#
我在JavaWorld上找到了Robert Lawson的一个实现,它使用XML-RPC从Java代码中调用Perl例程:Call Perl routines from Java
a11xaf1n7#
我知道这是旧的,但我最近遇到了同样的需求。我发现JPerl比
Inline::Java::PerlInterpreter
更方便。8zzbczxx8#
我想这真的取决于你的Perl代码是什么,以及你想做什么。
如果仅仅使用exec()太简单,那么gearman之类的方法可能会有帮助
moiiocjp9#
我不知道它的稳定性如何,也不知道它的维护情况如何,所以,另一个选择是编写一个脚本,完成应用程序所需的任务,然后从Java中执行该脚本。这不是最优雅的方式,但它确实有效。