SPUG: calling perl from java

ced at carios2.ca.boeing.com ced at carios2.ca.boeing.com
Fri Jun 29 18:50:13 CDT 2001


> I did some work with JPL when it was a bit more experimental. I've heard
> it's evolved quite a bit since then, to the point where it almost works! ;)

> Here's the link to the tutorial:.

> .http://sunsite.ualberta.ca/Documentation/Misc/perl-5.6.1/jpl/docs/Tutorial.h
tml

>>  Does anyone on this mailing list have experience calling Perl code from
Java?

If you're using newer jdk's (1.2/1.3), you'll probably need  
Jarkko Hietieniemi's patch unless 5.6.1 already has it in.  
Newer JDK's became intolerant of Perl monkeying with the 
environment.

Here's Jarkko Hietieniemi's latest patch below if you're
don't mind patching source:


Rgds,
--
Charles DeRykus


Change 8803 by jhi at alpha on 2001/02/14 03:14:14

        Duplicate environment for JPL so that JDK 1.2/1.3 don't get upset.

Affected files ...

... //depot/perl/perl.c#300 edit
... //depot/perl/perl.h#315 edit

Differences ...

==== //depot/perl/perl.c#300 (text) ====
Index: perl/perl.c
--- perl/perl.c.~1~     Wed Feb 14 05:19:55 2001
+++ perl/perl.c Wed Feb 14 05:19:55 2001
@@ -3257,6 +3257,8 @@
     char *s;
     SV *sv;
     GV* tmpgv;
+    char **dup_env_base = 0;
+    int dup_env_count = 0;

     argc--,argv++;     /* skip name of script */
     if (PL_doswitches) {
@@ -3325,6 +3327,23 @@
            env = environ;
        if (env != environ)
            environ[0] = Nullch;
+#ifdef NEED_ENVIRON_DUP_FOR_MODIFY
+       {
+           char **env_base;
+           for (env_base = env; *env; env++)
+               dup_env_count++;
+           if ((dup_env_base = (char **)
+                safemalloc( sizeof(char *) * (dup_env_count+1) ))) {
+               char **dup_env;
+               for (env = env_base, dup_env = dup_env_base;
+                    *env;
+                    env++, dup_env++)
+                   *dup_env = savepv(*env);
+               *dup_env = Nullch;
+               env = dup_env_base;
+           } /* else what? */
+       }
+#endif /* NEED_ENVIRON_DUP_FOR_MODIFY */
        for (; *env; env++) {
            if (!(s = strchr(*env,'=')))
                continue;
@@ -3340,7 +3359,13 @@
            (void)PerlEnv_putenv(savepv(*env));
 #endif
        }
-#endif
+       if (dup_env_base) {
+           char **dup_env;
+           for (dup_env = dup_env_base; *dup_env; dup_env++)
+               Safefree(*dup_env);
+           Safefree(dup_env_base);
+       }
+#endif /* USE_ENVIRON_ARRAY */
 #ifdef DYNAMIC_ENV_FETCH
        HvNAME(hv) = savepv(ENV_HV_NAME);
 #endif

==== //depot/perl/perl.h#315 (text) ====
Index: perl/perl.h
--- perl/perl.h.~1~     Wed Feb 14 05:19:55 2001
+++ perl/perl.h Wed Feb 14 05:19:55 2001
@@ -1692,6 +1692,13 @@
 #  define USE_ENVIRON_ARRAY
 #endif

+#ifdef JPL
+    /* E.g. JPL needs to operate on a copy of the real environment.
+     * JDK 1.2 and 1.3 seem to get upset if the original environment
+     * is diddled with. */
+#   define NEED_ENVIRON_DUP_FOR_MODIFY
+#endif
+
 #ifndef PERL_SYS_INIT3
 #  define PERL_SYS_INIT3(argvp,argcp,envp) PERL_SYS_INIT(argvp,argcp)
 #endif
End of Patch.



           Google Web Directory - Cool Jobs - Advertise with Us -
    Add Google to Your Site - Google in Your Language - All About Google

                                ©2001 Google



 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     POST TO: spug-list at pm.org       PROBLEMS: owner-spug-list at pm.org
      Subscriptions; Email to majordomo at pm.org:  ACTION  LIST  EMAIL
  Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
 For daily traffic, use spug-list for LIST ;  for weekly, spug-list-digest
  Seattle Perl Users Group (SPUG) Home Page: http://www.halcyon.com/spug/





More information about the spug-list mailing list