哈希 %ENV 包含你的当前环境。在 ENV 中设置一个值会更改你随后 fork() 出来的任何子进程的环境。
从 v5.18.0 开始,存储在 %ENV 中的键和值都被字符串化了。
my $foo = 1;
$ENV{'bar'} = \$foo;
if( ref $ENV{'bar'} ) {
say "Pre 5.18.0 Behaviour";
} else {
say "Post 5.18.0 Behaviour";
}
以前,只有子进程接收字符串化的值
my $foo = 1;
$ENV{'bar'} = \$foo;
# Always printed 'non ref'
system($^X, '-e',
q/print ( ref $ENV{'bar'} ? 'ref' : 'non ref' ) /);
之所以会发生这种情况,是因为你无法真正与外部进程共享任意的数据结构。