如何从 Java 调用 Perl?

2022-09-03 05:02:58

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


答案 1

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

但是,由于 JNI 实现对于不同的 JVM 的不可预测性,很难说 JVM 和 Perl 的哪些组合会起作用。通常,需要的是具有多重性的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/) ;
} 

答案 2

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

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

还是我误解了这个问题?


推荐