MenuIcon

Owl-Networks Archive

LoginIcon

Perl : Use of uninitialized value in string (numeric) ... 경고 메시지

| 분류: Perl | 최초 작성: 2009-10-08 23:48:09 |


1. 발생 :

변수/배열/해시 등을 아무 생각 없이 eq, ne 등의 연산자를 사용하여 비교하거나 print 등으로 출력할 때 발생한다.
대개 실행에는 별 문제가 없다. 그러나 실행할 때마다 뜨는 Warning 메시지가 영 신경쓰일 것이다.

원인과 그 해결 방법을 다음에서 알아본다. 일단 문제있는 코드.

#!/usr/bin/perl
use strict;
use warnings;

my( $string1, $string2 );
$string1 = $string2;

print $string1;
exit;


위 코드를 실행해 보면 print $string1; 열에 대해서 위 경고가 발생하는 것을 볼 수 있다.

이 경고는 해당 스칼라/배열/해시 변수가 정의는 되었으나 그 값이 false 이거나 비어있을1) 경우 이를 출력하거나 비교하는 등 사용할 때에 발생한다. Perl 인터프리터는...

"야, 그 스칼라 변수 정의는 되어 있는데, 빈통이야! 도대체 무슨 의도로 그 (텅텅 빈) 스칼라 변수를 사용해서 출력(비교)을 하는건데? 너 뭔가 여기에 들어 있다고 착각하고 있는 거 아냐? 한번 확인해봐!"

이런 이야기를 프로그래머에게 하고 싶은 것이다. 그렇다면 이런 메시지를 안 볼 수 있는 해결책은...

다음 코드를 확인한다.

#!/usr/bin/perl
use strict;
use warnings;

my( $string1, $string2 );
$string1 = $string2 || "";

print $string1;
exit;


위 굵은 글씨를 확인한다.

이는 스칼라 변수에 다른 스칼라 변수를 입력할 때, 만약 그 스칼라 변수가 "빈통(false/undef)"이라면 최소한 false 값을 갖지는 않도록 값을 넣어주는 역할을 한다. 위 코드를 실행해 보면 더 이상 uninitialized value 어쩌고 하는 경고 메시지는 나오지 않을 것이다.

이 문제의 해결에는 다음 게시물이 결정적인 도움이 되었습니다. 감사합니다.
http://www.tek-tips.com/viewthread.cfm?qid=1496857&page=1



1) 여기서 비어 있다는 의미는, 해당 스칼라 변수가 갖고 있는 값이 undef 라는 의미이다. 아무 것도 없다는 것과는 조금 의미가 다르다. 필자도 어설픈 지식만 갖고 있는지라 이에 대한 정확한 설명은 할 수 없음을 양해하기 바란다.

☞ 태그:

☞ 트랙백 접수 모듈이 설치되지 않았습니다.

☞ 덧글이 없고, 트랙백이 없습니다.

덧글을 남기시려면 여기를 클릭하십시오.
[483] < [350] [346] [345] [344] [341] ... [339] ... [335] [327] [326] [325] [318] > [19]

(C) 2000-2018, Owl-Networks. Powered by Perl. 이 페이지는 HTML 5 표준에 따라 작성되었습니다.