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' );
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Inline::C and environment vars
by gri6507 (Deacon) on Nov 14, 2011 at 12:47 UTC |