Почему ключи с пустыми строковыми значениями для Perl% ENV не показывают подпроцессы Windows? - PullRequest
3 голосов
/ 25 августа 2009

Я хочу (нужно) запустить подпроцесс из сценария 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);

Я использую Perl ActiveState версии v5.8.8 на коробке WinXP.

Я знаю, что это работает в Python, но у меня нет выбора в отношении языка реализации, это должен быть Perl.

Ответы [ 3 ]

9 голосов
/ 25 августа 2009

Насколько я знаю, в Windows нет такой вещи, как пустая переменная окружения. Определение их как пустых - это то же самое, что и их определение.

Ваши сценарии Perl действительно отображают запись ZZZ_3 при запуске в Unix-подобной системе.

0 голосов
/ 25 августа 2009

Использование клубничного и Cygwin Perl в Vista приводит к

ZZZ_1 = One
ZZZ_2 = Two
ZZZ_4 = Four
0 голосов
/ 25 августа 2009

Это, похоже, проблема с вашим Perl activestate. Тестирование на windows2000 + cygwin дает:

$ perl --version

This is perl, v5.10.0 built for cygwin-thread-multi-64int
(with 6 registered patches, see perl -V for more detail)

Copyright 1987-2007, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.


$ perl env_in.pl | grep ZZZ
ZZZ_1 = One
ZZZ_2 = Two
ZZZ_3 =
ZZZ_4 = Four

$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...