如何从Java调用Perl?

时间:2008-11-08 15:44:08

标签: java perl

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

9 个答案:

答案 0 :(得分:17)

Inline-Java是从Perl调用java的常用库,这个post propose a 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 => <<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/) ;
} 

答案 1 :(得分:6)

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

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

或者我误解了这个问题?

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

如果仅使用exec()过于简单,gearman之类的内容可能会有所帮助

答案 8 :(得分:-1)

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