2017-12-22 37 views
-2

URL에서 일부 변수를로드하고 내 CGI 스크립트가 초기화되었는지 여부를 확인하려고합니다. 필자는 초기화되지 않은 값을 Perl의 목록에 넣을 수 없다는 것을 빨리 알았습니다.목록에서 초기화되지 않은 값 사용

내 접근 방식은 단순히 목록을 반복하고 스위치 변수 $sucessDOM (모든 데이터가 초기화 되었으면 1)을 사용합니다.

나는이 함께했다 :

### Read data from HTML 
my $mailinglist = param('mailinglist'); 
my $firstname = param('firstname'); 
my $lastname = param('lastname'); 
my $mail  = param('mail'); 

my $sucessDOM = 0; 

my @DOM = { $mailinglist, $firstname, $lastname, $mail }; 

### Data validation 
for my $data (@DOM) { 

    if ($data eq undef) { 
     $sucessDOM = $sucessDOM + 1; 
    } 

    if ($sucessDOM = @DOM) { 
     print "@DOM\n"; 
     $sucessDOM = 1; 
    } 
    else { 
     $sucessDOM = 0; 
    } 
} 

나는 또한 그들은 모두 초기화되지 않은 경우에만이 값에 대한 오류가 배열에있다 왜 이해할 수 없다

[Fri Dec 22 20:30:40 2017] read_form.cgi: Use of uninitialized value $mailinglist in anonymous hash ({}) at ./read_form.cgi line 20. 
[Fri Dec 22 20:30:40 2017] read_form.cgi: Use of uninitialized value $lastname in anonymous hash ({}) at ./read_form.cgi line 20. 
[Fri Dec 22 20:30:40 2017] read_form.cgi: Use of uninitialized value in string eq at ./read_form.cgi line 24. 
HASH(0x55c8a73eeea8) 

을 다음과 같이 출력은 , 어떤 값도 전달하지 않고 직접 스크립트를 실행합니다.

+0

'내 {정의 ($ _)!} $의 successDOM = GREP $ 메일 링리스트, $의 FIRSTNAME, $의 LASTNAME, $ 메일,'!을 – ikegami

답변

3

당신은 당신의 코드를 적어도 네 개의 문제가 :

먼저, {}는 익명의 해시를 만들고 그것의 참조를 반환; 이것은 @DOM에서 끝나는 단일 값입니다. 경고는 해시 키가 문자열이어야하고 이들이 undef인지 경고합니다. 당신은 eq 문자열을 비교, 같은

my @DOM = ($mailinglist, $firstname, $lastname, $mail); 

둘째를 할당해야한다, 그래서 ''undef 변환합니다. 모든 배열 요소는 내부 (즉, 루프의 마지막 반복 있지만에 진실되지 않습니다) 루프에 성공한다면

if (! defined $data) { 

셋째 $ 데이터가 미확정 인 경우, 테스트하려면, 당신은 확인된다. if ($successDOM... 블록을 for 루프 다음으로 이동하십시오.

넷째, =은 단지 대입 연산자입니다. 숫자 비교를 위해 ==를 사용

if ($successDOM == @DOM) {