in reply to Inline::C and environment vars

Perl does not use the C runtime's copy of the environment. Probably for very good reasons.

Rather than accessing the CRTs copy from XS, you should access Perl's copy instead.

This prints the value of the pre-existing envvar 'path', then nothing from the (probably) non-exitant envvar 'fred', before setting 'fred' from Perl and then retrieving it from XS.:

#! perl -slw use strict; use Inline C => Config => BUILD_NOISY => 1; use Inline C => <<'END_C', NAME => 'XSenv', CLEAN_AFTER_BUILD => 0; char *test( char *name ) { HV *env = get_hv( "ENV", 0 ); SV **pval = hv_fetch( env, name, strlen( name ), 0 ); if( pval ) { SV *val = *pval; return( SvPVX( val ) ); } return( "" ); } END_C print test( 'path' ); print test( 'fred' ); $ENV{fred} = 12345; print test( 'fred' );

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: Inline::C and environment vars
by gri6507 (Deacon) on Nov 14, 2011 at 12:47 UTC
    This is a good suggestion, but unfortunately, does not address my problem. The issue that I have is that mylib will have different behavior depending on value of environment variables, and I do not have full control over that library to change it to use arguments instead of env vars. This solution would have been ideal in cases where there is full control of the library sources.