Как я могу назвать 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 с некоторыми расширениями. Ваш код может работать в режиме сна. Если это возможно, вы можете создать экземпляр интерпретатора, запустить код и получить результат.

Ответ 6

Я нашел реализацию на JavaWorld Робертом Лоусоном, которая использует XML-RPC для вызова подпрограмм Perl из вашего Java-кода: Вызов процедур Perl из Java

Ответ 7

Я знаю, что это старо, но я недавно столкнулся с теми же потребностями. Я нашел JPerl более удобным, чем Inline::Java::PerlInterpreter.

Ответ 8

Угадайте, действительно ли это зависит от вашего кода Perl и того, что вы пытаетесь сделать.

Если просто использовать exec() слишком просто, может оказаться полезным gearman

Ответ 9

Я не знаю, насколько стабильным это будет, или насколько он поддерживается. Таким образом, другим вариантом было бы написать script, который сделает что-то, что потребуется вашему приложению, а затем выполнить это script с Java. Не самый элегантный способ, но он работает.