7

Is there any way to execute perl code without having to use Runtime.getRuntime.exec("..."); (parse in java app)?

6 Answers 6

5

I've been looking into this myself recently. The most promising thing I've found thus far is the Inline::Java module on CPAN. It allows calling Java from Perl but also (via some included Java classes) calling Perl from Java.

Sign up to request clarification or add additional context in comments.

1 Comment

are you sure about this: can you do the reverse: calling perl from Java , is it reliable in mission critical stuff?
4

this looks like what you're asking for

Comments

4

Inline::Java provides an embedded Perl interpreter in a class. You can use this to call Perl code from your Java code.

Graciliano M. Passos' PLJava also provides an embedded interpreter.

Don't use JPL (Java Perl Lingo)--the project is dead and has been removed from modern perls.

Comments

2

Inline::Perl is the accepted way. But there's also Jerl which may be run from a JAR.

Here's an example without using the VM wrapper (which is not so fun).

Here's some examples using the jerlWrapper class to make it easier to code:

import jerlWrapper.perlVM;

public final class HelloWorld  {

    /* keeping it simple */
    private static String helloWorldPerl = "print 'Hello World '.$].\"\n\";";

    public static void main(String[] args) {
        perlVM helloJavaPerl = new perlVM(helloWorldPerl);  
        helloJavaPerl.run();
    }
}

or

import jerlWrapper.perlVM;

public final class TimeTest  {

    /*  The (ugly) way to retrieve time within perl, with all the
     *  extra addition to make it worth reading afterwards.
     */
    private static String testProggie = new String(
            "my ($sec, $min, $hr, $day, $mon, $year) = localtime;"+
            "printf(\"%02d/%02d/%04d %02d:%02d:%02d\n\", "+
            "       $mon, $day + 1, 1900 + $year, $hr, $min, $sec);"
    );

    public static void main(String[] args) {
        perlVM helloJavaPerl = new perlVM(testProggie);     
        boolean isSuccessful = helloJavaPerl.run();
        if (isSuccessful) {
            System.out.print(helloJavaPerl.getOutput());
        }
    }
}

2 Comments

Jerl for Perl5 is being deprecated. Rakudo perl has VM options going forward: en.wikipedia.org/wiki/Rakudo_Perl_6
Jerl for Perl5 is indeed deprecated. While the project was stable for 2 years+, there are better virtualization options.
1

I could have sworn it was easy as pie using the Java Scripting API.
But apparently it's not on the list of existing implementations...

So, maybe this helps instead : java and perl
edit: i said "maybe"

1 Comment

The JPL is dead. Don't use it. Inline::Java is the way to go.
0

No, I don't believe this exists. While there have been several languages ported to the JVM (JRuby, Jython etc) Perl is not yet one of them.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.