【发布时间】:2010-11-22 13:09:49
【问题描述】:
我想(需要)从一个检查某些环境变量的 perl 脚本启动一个子进程。在一种情况下,环境变量需要存在但为空。
$ENV{"GREETING"} = "Hello World"; # Valid
$ENV{"GREETING"} = ""; # also valid
我可以设置 $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: $?";
这里是 env_out.pl 脚本。
#!/usr/bin/perl
use strict;
use warnings;
print ($_," = ", $ENV{$_}, "\n") for (sort keys %ENV);
我在 WinXP 机器上使用 ActiveState perl 版本 v5.8.8。
我知道这在 python 中可以工作,但我没有选择实现语言,它必须是 Perl。
【问题讨论】:
-
看来问题出在 windows 而不是 perl(见下文)。
-
这可能是与您的 Python 脚本进行交叉检查的好时机;)
-
我没有在 DOS 中运行我的 perl 脚本,而是在 IPython 中运行它——Doh!
标签: windows perl environment-variables