%ENV
The hash %ENV
contains your current environment. Setting a value in ENV
changes the environment for any child processes you subsequently fork()
off.
As of v5.18.0, both keys and values stored in %ENV
are stringified.
1 2 3 4 5 6 7 | my $foo = 1; $ENV { 'bar' } = \ $foo ; if ( ref $ENV { 'bar' } ) { say "Pre 5.18.0 Behaviour" ; } else { say "Post 5.18.0 Behaviour" ; } |
Previously, only child processes received stringified values:
1 2 3 4 5 6 | my $foo = 1; $ENV { 'bar' } = \ $foo ; # Always printed 'non ref' system ($^X, '-e' , q/ print ( ref $ENV { 'bar' } ? 'ref' : 'non ref' ) /); |
This happens because you can't really share arbitrary data structures with foreign processes.
Please login to continue.