2012-10-12 4 views
0

프로젝트의 경우 다른 하나의 Perl/CGI 스크립트를 호출해야합니다. 내가 테스트를 위해 사용하고 해당 스크립트의 매우 단순화 된 버전은 여기 (코드를 많이 붙여 실제 스크립트 재귀를 사용하지 않지만,이 방법은 내가 &을 복사 할 필요가 없습니다) :다른 Perl/CGI 스크립트에서 Perl/CGI 스크립트에 매개 변수를 전달할 때 이상한 동작이 발생했습니다.

#!/usr/local/bin/perl 
use CGI qw(:standard); 
use POSIX 'setsid'; 
$|=1; 

print "Content-type: text/html\n\n"; 

@names = param; 
print "@names"; 

if(defined(param('submit'))){ 
     #delete_all(); 
     system('perl testParams.pl abc=123'); 
     exit(0); 
} else{ 
     print "NO SUBMIT PARAM"; 
} 

이 스크립트가 수행해야 할 작업 :

  1. 모든 매개 변수의 이름을 인쇄하십시오.
  2. 제출 매개 변수가 정의 된 경우 "abc"라는 매개 변수를 사용하여 스크립트를 다시 실행하십시오.
  3. "제출"매개 변수가 정의되지 않은 경우 "NO SUBMIT PARAM"을 인쇄하십시오.

스크립트가 실제로 무엇을 : 모든 매개 변수의

  1. 인쇄 이름.
  2. "제출"매개 변수가 정의 된 경우 원래 스크립트가 실행 된 것과 동일한 매개 변수를 사용하여 스크립트를 다시 실행하십시오.
  3. "제출"매개 변수가 정의되지 않은 경우 "NO SUBMIT PARAM"을 인쇄하십시오.

Perl/CGI가 새로운 매개 변수를 무시하고 대신 스크립트를 실행할 때 이전 매개 변수를 보내는 원인이 무엇입니까?

답변

2

CGI은 CGI 환경을 찾을 수없는 경우 명령 줄 인수 만 처리합니다. CGI 환경이 상위 프로세스에서 상속됩니다.

my %CGI_VARS = map { $_ => 1 } qw(
    REQUEST_METHOD 
    CONTENT_LENGTH 
    CONTENT_TYPE 
    ... 
); 

local %ENV = 
    map { $_ => $ENV{$_} } 
    grep !$CGI_VARS{$_} && !/^HTTP/, 
     keys(%ENV); 

하지만이 디자인은 좋지 않습니다. 실제로, 두 개의 스크립트는 공통 모듈의 얇은 프런트 엔드 여야합니다.

두 가지 모두에 동일한 스크립트를 사용할 수도 있지만 (심볼릭 링크를 사용하여) 스크립트를 호출하는 데 사용 된 URL을 기반으로 동작을 변경합니다.

관련 문제