2014-04-28 1 views
1

나는 다음 코드를 이해할 수 없다 :배열의 null을 테스트하려면 어떻게해야합니까?

perl -e ' 
my @test = undef; 
if(@test) {print "Full\n";}' 
Full 

undef 할당되어 있지만 실제로 undef 1 개 요소가 @test 것으로 보인다.
@test이 null 인 경우 테스트하는 적절한 방법은 무엇입니까?

현재
my @test =(); 

당신이하고있는 : 당신이 관찰 될 때

my @test = (undef); 

가, 어느, if(scalar(@test) == 1 && !$test[0])을하는
은 할 아무것도에 @array을 초기화하려면 나

+3

당신은 여기 내 설명을 읽을 수도 있습니다 해시 – szabgab

답변

10

에 이상한 것 같다 배열에 단일 값을 지정합니다.

가 이미 선언 된 배열을 지우려면과 같이 undef를 사용할 수 있습니다 http://perlmaven.com/undef-on-perl-arrays-and- :

undef @test; 
+0

해시를 초기화하는 방법이라고 생각했습니다. – Jim

+0

해시와 배열 모두 목록으로 초기화됩니다. 해시는 그리스트가 키/값 쌍을 포함 할 것을 기대한다. – Miller

+1

기존의 배열 (또는 해시)을 지우려면'@test =()'와'% test =()'처럼 빈리스트를 할당하는 것이 가장 좋다. 'undef @ test'를 사용하면 배열에 할당 된 메모리가 Perl의 풀로 다시 릴리스됩니다. 이는 일반적으로 비효율적이며 바람직하지 않습니다. – Borodin

관련 문제