2009-08-25 2 views
3

특정 환경 변수를 검사하는 perl 스크립트에서 하위 프로세스를 시작 (필요)하고 싶습니다. 한 예로, 환경 변수는 비어 있어야하지만 비어 있어야합니다.Perl의 % ENV에 빈 문자열 값이있는 키가 Windows 하위 프로세스를 표시하는 이유는 무엇입니까?

$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의 펄 버전 v5.8.8을 사용하고 있습니다.

나는 이것이 파이썬에서 작동한다는 것을 알고 있지만, 구현 언어에 대한 선택권이 없다. Perl이어야한다.

+0

에 비스타 결과에 모두 딸기 펄과 Cygwin에서 펄을 사용하여. –

+0

이것은 파이썬 스크립트와 교차 점검하기에 좋은 때입니다;) –

+0

DOS에서 필자의 펄 스크립트를 실행하지 않고 IPython에서 실행했습니다 - Doh! –

답변

9

필자가 아는 한 Windows에는 빈 환경 변수가 없다. 그것들을 비우도록 정의하는 것은 그것들을 정의 해제하는 것과 같은 것이다.

당신의 Perl 스크립트는 유닉스 계열 시스템에서 실행될 때 참으로 ZZZ_3 항목을 표시합니다.

+0

아! 네가 맞을지도 모른다. –

0

당신의 activestate perl에 문제가있는 것 같습니다. 지금 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 

$ 
+0

Cygwin 환경 변수는 Windows와 동일한 규칙을 따릅니 까? –

+1

아마도 그것이 나타나지 않을 것입니다 (cygwin의 요점은 유닉스 환경을 제공하는 것이기 때문에 무리하지 않습니다). – hlovdal

+1

@JB 그가 bash에서 스크립트를 실행 한 것은 아닙니다. Cygwin'perl'을 사용하여 평범한 옛날'cmd.exe' 쉘에서 스크립트를 실행하면, 빈 문자열로 설정된 내용을 가진 변수를 볼 수 없습니다. –

0

이 문제가 창문을하지 펄 (아래 참조)입니다처럼 보이는

ZZZ_1 = One 
ZZZ_2 = Two 
ZZZ_4 = Four