Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re^18: Using STDIN after exec() with ActiveState Perl

by Yaribz (Sexton)
on Jun 21, 2015 at 22:19 UTC ( #1131419=note: print w/replies, xml ) Need Help??


in reply to Re^17: Using STDIN after exec() with ActiveState Perl
in thread Using STDIN after exec() with ActiveState Perl

output of perl -V:
http://pastebin.com/6bE8L9vA
  • Comment on Re^18: Using STDIN after exec() with ActiveState Perl

Replies are listed 'Best First'.
Re^19: Using STDIN after exec() with ActiveState Perl
by Anonymous Monk on Jun 21, 2015 at 23:03 UTC

    output of perl -V: http://pastebin.com/6bE8L9vA

    This is perlmonks, we don't need pastebins

    Anyway, 5.20.1 is plenty new

    Yeah, swig perl "%ENV" finds %ENV vs C's setenv which suggests Env::C - Get/Set/Unset Environment Variables on the C level

    "plain xs" works for gettin %ENV changes reflected ; I never cared much for swig

    #!/usr/bin/perl -- use strict; use Inline C => Config => BUILD_NOISY => 1; use Inline C => <<'END_C', NAME => 'modSV', CLEAN_AFTER_BUILD => 0; #include <stdlib.h> /* setenv/getenv */ char* modSV() { return getenv("HORSEY"); } END_C use Data::Dump qw/ dd /; dd( $ENV{HORSEY} => modSV() ); $ENV{HORSEY}='Neigh'; dd( $ENV{HORSEY} => modSV() ); __END__ (undef, undef) ("Neigh", "Neigh")

      "plain xs" works for gettin %ENV changes reflected ; I never cared much for swig
      Are you sure it's really related to xs vs swig and not Linux vs Windows? Did you test your code under Windows?
      Windows manages two sets of environment definitions as soon as the CRT is started which leads to consistency problems such as the one I encountered, but it's not specific to perl (cf http://www.codeproject.com/Articles/43029/When-what-you-set-is-not-what-you-get-SetEnvironme)

      For the record, here is the workaround I came up with for now:
      if($^O eq 'MSWin32') { require Win32::API; Win32::API->Import('msvcrt', 'int __cdecl _putenv (char* envstring)' +); } sub exportEnvVar { my $envVar=shift; my $envVarDef="$envVar=".($ENV{$envVar}//''); die "Unable to export environment variable definition \"$envVarDef\" +" unless(_putenv($envVarDef) == 0); }
      Then, when my script runs under Windows, I call exportEnvVar for each environment variable I update which needs to be seen by the dynamic library. This adds yet another platform-specific code to my script but I guess it's unavoidable... On Linux I don't need to do all that but on the other hand I need to restart (exec self) when I update LD_LIBRARY_PATH to select the dynamic library.
        Yes i tested on win32
      Thanks for the links. I guess swig can deal with %ENV on linux but not on Windows then, since it works on my linux system without exec'ing.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1131419]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2022-05-23 15:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you prefer to work remotely?



    Results (82 votes). Check out past polls.

    Notices?