2009-06-17 3 views

답변

25

배열에 요소가 할당되어 있기 때문에 배열에 요소가 있습니다. 다음을 고려하십시오.

@array = undef; # Assigns the value 'undef' to @array 
@array =();  # Assigns the empty list to @array 
undef @array; # Undefines @array 

이들은 비슷하지만 첫 번째 줄은 다른 두 줄과 같습니다 (동일한 내용). 첫 번째 행은 단일 요소 (값 undef)를 갖는 배열을 생성합니다. 다른 두 개는 빈 배열을 만듭니다. Perl에서 undef은 값과 연산자입니다. 첫 번째 행은이를 값으로 사용하고, 마지막 행은이 값을 연산자로 사용합니다.

일반적으로 어레이를 지울 필요는 없습니다. 선언 할 때 그들은 비어 :

my @array; # There's nothing in here, yet 
+2

사이드 비고 : 스칼라 변수 $ p = undef와 undef $ p는 동일합니다. – user55400

8

Perl에서 undef은 유효한 값입니다. 어레이 또는리스트에 undef 중 하나 (또는 ​​임의의 수)를 넣을 수 있습니다. 당신이 배열의 모든 요소를 ​​제거하려면

, 이렇게 :

@my_array =(); 
+1

다른 방법으로, 당신은 "미확정 @my_array"할 수 –

+0

또는 $ # my_array 배열 = -1 ;. 또는 스플 라이스 (@ my_array, 0, @ my_array); – ysth

+0

@Ysth : 궁금합니다. 왜 @my_array를 연결하지 않으시겠습니까? perldoc -f splice에서 : "OFFSET과 LENGTH가 모두 생략되면 모든 것을 제거합니다." – Telemachus

11

는 펄의 논리 값에 대한 자세한 내용은 What is Truth?를 참조하십시오. (다른 언어에서 오는 경우, 당신은 몇 가지 다른 놀라움에 할 수있다, 그래서 읽기 가치가있다.)

다음 기사에서 키 비트입니다 :

definedundef이 좋은가 스칼라 테스트 및 설정 배열로 을 시도하지 마십시오. 현재, defined(@array)은 Perl 이 배열 에 대해 할당 된 저장소가 평균 이상 프로그래머에게는 인 경우 true를 반환합니다. 초기 상태로 에게 배열을 반환하기 위해, 우리는 말 :

@array =();  # good 

@array = undef@array 가 하나의 요소는 스칼라 값 undef 인으로, 한 요소의 목록을 포함하는 것입니다 말하는. 이것은 거의 우리가 가 원하는 것입니다.

다른 팁 : 변수를 my으로 지역화하십시오. my @array = (#whatever);

관련 문제