



Встроенная Java - это обычная библиотека для вызова java из Perl, и этот модуль разместить предложение org.perl.java, который должен позволять вызывать Perl из Java, как и просили.
Однако из-за непредсказуемости реализаций JNI для разных JVM трудно сказать, какие комбинации JVM и Perl будут работать. Обычно требуется Perl с МНОЖЕСТВЕННОСТЬЮ и скомпилированные потоки. Это означает, что он использует специально созданный Perl.
В противном случае Встроенный :: Java :: Обратный вызов позволяет вам вызывать функции 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){
// $@ 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, и это показалось мне немного неудобным. Если бы у меня было свободное время, я бы, вероятно, переопределил его с помощью веб-сервисов и таким образом называл бы код Perl.
Я нашел реализацию на JavaWorld Роберта Лоусона, которая использует XML-RPC для вызова подпрограмм Perl из вашего Java-кода: Вызов подпрограмм Perl из Java
Sleep - это язык сценариев с интерпретатором, который запускается в JVM. Насколько я понимаю, язык Sleep - это в основном Perl с некоторыми расширениями. Ваш код может работать в спящем режиме. Если это так, вы можете создать экземпляр интерпретатора, запустить код и получить результат.
Sleep не может запускать какой-либо интересный код Perl из-за его несовместимости. Вы не можете заменить Perl на Sleep.
Я знаю, что это старый, но недавно я столкнулся с такими же потребностями. Мне показалось, что JPerl удобнее, чем Inline::Java::PerlInterpreter.
Думаю, это действительно зависит от того, какой у вас Perl-код и что вы пытаетесь сделать ...
Если просто использовать exec () слишком просто, может быть полезно что-то вроде редуктор
Ракудо позволяет вам запускать Perl6 внутри JVM, и есть Надстройка Perl5, который позволяет запускать большую часть старого кода, хотя, конечно, не XS. Также существует JERL, который запускает текущий microperl внутри JVM. Это во многом зависит от того, чем вы хотите заниматься, но это стоит проверить.
есть ли необходимость передавать данные из perl обратно в java? обычно здесь возникают проблемы / трудности, иначе это будет вопрос открытия процесса и выполнения сценария perl.