Как я могу назвать Perl с Java?
У меня есть модуль Perl, который я хотел бы использовать с Java. Есть ли способ вызвать этот код, используя ActiveState Perl в Windows или общий Perl, который поставляется с Linux? Я нашел ссылки на JPL, но он, похоже, больше не поддерживается.
Ответы
Ответ 1
Inline-Java - обычная библиотека для вызова java из Perl, и это предложите org.perl.java модуль, который должен разрешить вызов Perl с Java, как и было задано.
Однако из-за непредсказуемости реализаций JNI для разных
JVM трудно сказать, какие комбинации JVM и Perl будут работать. Как правило, требуется Perl с MULTIPLICITY и скомпилированные потоки. Это означает, что он использует настраиваемый Perl.
В противном случае Inline:: Java:: Callback позволяет вызывать функции Perl с Java. Для этого вам нужно создать объект 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/) ;
}
Ответ 2
Это не то, что Runtime.exec() для?
Runtime.getRuntime().exec("/usr/bin/perl myPerl.pl");
Или я не понимаю вопрос?
Ответ 3
Я использовал Inline:: Java немного, и нашел это немного нерешительно, если бы у меня было время, я бы, вероятно, переопределял использование веб-сервисов и вызывал код perl таким образом.
Ответ 4
Сон - это язык сценариев с интерпретатором, который работает в JVM. Из того, что я понимаю, язык сна - это в основном Perl с некоторыми расширениями. Ваш код может работать в режиме сна. Если это возможно, вы можете создать экземпляр интерпретатора, запустить код и получить результат.
Ответ 5
Rakudo позволяет запускать Perl6 внутри JVM, и есть Perl5, который позволяет вам запускать самый старый код, хотя, конечно, не XS. Существует также JERL, который запускает текущий микроперметр внутри JVM. Это зависит от того, что вы хотите сделать, но это стоит проверить.
Ответ 6
Я нашел реализацию на JavaWorld Робертом Лоусоном, которая использует XML-RPC для вызова подпрограмм Perl из вашего Java-кода: Вызов процедур Perl из Java
Ответ 7
Я знаю, что это старо, но я недавно столкнулся с теми же потребностями. Я нашел JPerl более удобным, чем Inline::Java::PerlInterpreter
.
Ответ 8
Угадайте, действительно ли это зависит от вашего кода Perl и того, что вы пытаетесь сделать.
Если просто использовать exec() слишком просто, может оказаться полезным gearman
Ответ 9
Я не знаю, насколько стабильным это будет, или насколько он поддерживается. Таким образом, другим вариантом было бы написать script, который сделает что-то, что потребуется вашему приложению, а затем выполнить это script с Java. Не самый элегантный способ, но он работает.