如何从Java调用Perl?

nmpmafwu  于 2022-11-15  发布在  Perl
关注(0)|答案(9)|浏览(186)

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

2nc8po8w

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**对象。下面是一个典型用法的示例:

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/) ;
}
bd1hkmkf

bd1hkmkf2#

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

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

中 的 每 一 个
还是 我 误解 了 你 的 问题 ?

aelbi1ox

aelbi1ox3#

Rakudo允许您在JVM中运行Perl6,还有一个Perl5 add-on允许您运行大多数旧代码,当然没有XS。还有一个JERL可以在JVM中运行当前的microperl。这在很大程度上取决于您要做什么,但这些都值得一看。

rlcwz9us

rlcwz9us4#

我用过一点Inline::Java,发现它有点麻烦,如果我有时间的话,我可能会使用Web服务重新实现,并以这种方式调用Perl代码。

nukf8bse

nukf8bse5#

Sleep是一种脚本语言,带有一个在JVM中运行的解释器。据我所知,Sleep语言基本上是Perl加上一些扩展。您的代码可能可以在Sleep中运行。如果可以,您可以示例化解释器,运行代码并检索结果。

iyr7buue

iyr7buue6#

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

a11xaf1n

a11xaf1n7#

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

8zzbczxx

8zzbczxx8#

我想这真的取决于你的Perl代码是什么,以及你想做什么。
如果仅仅使用exec()太简单,那么gearman之类的方法可能会有帮助

moiiocjp

moiiocjp9#

我不知道它的稳定性如何,也不知道它的维护情况如何,所以,另一个选择是编写一个脚本,完成应用程序所需的任务,然后从Java中执行该脚本。这不是最优雅的方式,但它确实有效。

相关问题