为什么Perl的%ENV中具有空字符串值的键不显示Windows子进程?

Sim*_*ett 3 windows perl environment-variables

我想(需要)从检查某些环境变量的perl脚本启动一个子进程.在一个实例中,环境变量需要存在但是为空.

 $ENV{"GREETING"} = "Hello World";        # Valid
 $ENV{"GREETING"} = "";                   # also valid
Run Code Online (Sandbox Code Playgroud)

我可以设置$ ENV {"GREETING"} =""; 在那个perl脚本中,$ ENV {"GREETING"}是空的,但在任何子流程中,环境变量都不存在.

这是一些示例代码来演示.这个脚本env_in.pl设置了一些环境变量,ZZZ_3为空.然后它调用env_out.pl来输出环境变量,输出中缺少ZZZ_3.

#!/usr/bin/perl
# env_in.pl

use strict;`enter code here`
use warnings;

$ENV{ZZZ_1} = "One";
$ENV{ZZZ_2} = "Two";
$ENV{ZZZ_3} = "";
$ENV{ZZZ_4} = "Four";

my (@cmd) = ("perl", "env_out.pl");
system(@cmd) == 0 or die "system @cmd failed: $?";
Run Code Online (Sandbox Code Playgroud)

这是env_out.pl脚本.

#!/usr/bin/perl

use strict;
use warnings;

print ($_," = ", $ENV{$_}, "\n") for (sort keys %ENV);
Run Code Online (Sandbox Code Playgroud)

我在WinXP盒子上使用ActiveState perl版本v5.8.8.

我知道这可以在python中工作,但我没有选择实现语言,它必须是Perl.

JB.*_*JB. 9

据我所知,Windows中没有空环境变量.将它们定义为空是与取消它们相同的事情.

在类Unix系统上运行时,Perl脚本确实显示ZZZ_3条目.