%ENV

雜湊 %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' ) /);

這是因為您無法與外部程序分享任意資料結構。