我有一个Perl模块,我想从Java使用。有没有办法使用Windows上的ActiveState Perl或Linux附带的通用Perl来调用此代码?我找到了JPL的参考,但它似乎不再被维护。如何从Java调用Perl?
回答
Inline-Java是从Perl调用java的常用库,以及这个应该允许从Java调用Perl的post propose a org.perl.java模块。
但是,由于不同 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){
// [email protected] 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/) ;
}
我不知道如何稳定这是否或者如何保持良好事实就是这样,另一种选择是编写一个脚本,做一些事情你会申请需要然后从Java执行该脚本。不是最优雅的方式,但它的工作原理。
这不是Runtime.exec()的用途吗?
Runtime.getRuntime().exec("/usr/bin/perl myPerl.pl");
还是我误解了这个问题?
我已经使用了Inline :: Java,并且发现它有点复杂,如果我有时间结束,我可能会重新实现使用Web服务并以这种方式调用perl代码。
我发现罗伯特·劳森,它使用XML-RPC从Java代码调用Perl程序上JavaWorld的实现:Call Perl routines from Java
睡眠是一种脚本语言,在JVM上运行的解释。从我所了解的睡眠语言基本上来说Perl是一些扩展。您的代码可能能够在Sleep中运行。如果有,你可以实例化解释器,运行代码并检索结果。
睡眠不能运行任何有趣的Perl代码,因为它的不兼容性。你不能用Sleep代替Perl。 – daxim 2010-06-09 09:39:40
我知道这是旧的,但我最近遇到了相同的需求。我发现JPerl更方便Inline::Java::PerlInterpreter
。
猜猜这真的取决于你的Perl代码是什么,你想如果只是使用EXEC()做..
什么太简单,像gearman可帮助
Rakudo允许您在JVM中运行Perl6,并且有一个允许您运行大多数旧代码的Perl5 add-on,尽管当然没有XS。在JVM内部还有运行当前microperl的JERL。这取决于你想要做什么,但这些值得检查。
- 1. 从java调用perl
- 2. 从perl调用java类
- 3. 从Java servlet调用perl脚本
- 4. 从Java调用“交互式”Perl脚本
- 5. 无法从Java调用Perl脚本
- 6. 如何从Java高效地调用Perl程序?
- 7. 如何从Perl调用PHP脚本?
- 8. 如何从Perl CGI脚本调用curl?
- 9. 如何从flex调用perl脚本?
- 10. 我如何从Perl进行HTTP调用?
- 11. 如何从Perl调用python脚本?
- 12. 如何从Flex调用Perl子例程?
- 13. 如何从LoadRunner调用Perl代码?
- 14. 如何从Perl脚本调用shell
- 15. 如何从Java调用
- 16. 如何从Java调用C++?
- 17. 如何从asp调用java?
- 18. 如何从另一个perl cgi脚本调用perl cgi脚本
- 19. 如何从另一个PL/Perl函数调用PL/Perl函数?
- 20. 从Perl调用Python模块
- 21. 从Make调用perl脚本
- 22. 从Python调用Perl模块
- 23. 从Perl调用Javascript函数
- 24. 调用从Perl脚本
- 25. 从Python调用Perl脚本
- 26. 如何调试从PHP文件中调用的Perl
- 27. 从shell脚本调用perl,如何将返回值从perl传递给shell?
- 28. 如何使用SWIG从C++调用Java?
- 29. 如何从Java调用/使用MRI Ruby?
- 30. 如何使用JNI从Java调用MEMCMP
是否需要将数据从perl传递回java?那通常是出现问题/困难的地方,否则,这将是打开一个进程并执行perl脚本的问题。 – Chii 2008-11-08 16:31:12