哈希 %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' ) /);
之所以会发生这种情况,是因为你无法真正与外部进程共享任意的数据结构。