2014-12-18 2 views

답변

5

일부 언어에서는 새 변수가 초기화되지 않은 언어로 제공됩니다. Perl에서는 스칼라가 정의되지 않은 상태로 만들어지고 배열과 해시는 비어있게 만들어집니다.

두 번째는 낭비입니다. 빈 목록을 빈 해시에 할당해도 아무 효과가 없습니다.

+0

그건 내 직감이지만, 목적이 있다고 너무 많이 생각합니다! – fugu

4

당신은 확실히 맞습니다. 차이점이 없습니다. 해시 (또는 배열)를 선언하면 빈 데이터 구조가 만들어집니다.

이것은 스칼라 선언과 약간의 차이가 있습니다. 스칼라는 선언되지만 정의되지 않습니다. 이것은 실제로 해시 나 배열에 대해 의미가 없기 때문에 아무런 차이가 없습니다. 당신이 defined 문서를 보면

use Data::Dumper; 

my $scalar; 
my $scalar2 = ''; 

print Dumper \$scalar; 
print Dumper \$scalar2; 

my %hash; 
my %hash2 =(); 
print Dumper \%hash; 
print Dumper \%hash2; 

my @array; 
my @array2 =(); 

print Dumper \@array; 
print Dumper \@array2; 

, 당신은 참조하십시오. 더 이상 사용되지 않습니다 집계 (해시 및 배열)에 정의의

"사용이 그 집합의 메모리 이제까지 할당했다 여부를보고하는 데 사용. 이 동작은 Perl의 차후 버전에서 사라질 수 있습니다. 대신 크기에 대한 간단한 테스트를 사용해야합니다. "

+0

Re "스칼라의 선언과 약간의 차이가 있습니다 - 스칼라는 선언되지만 정의되지 않습니다."배열과 해시는 마찬가지로 배열을 할당 할 수 없습니다. 'perl -MDevel :: Peek -e '@ a = "x"; @ a =(); 덤프 (\ @ a); undef @a; 덤프 (\ @ a); '' – ikegami

+0

'@a =();의 스칼라 값은'$ a = undef;'입니다. – ikegami

+0

흠.하지만 테스트를 위해'$ scalar'에'defined'을 할 수는 있지만'@ a'에서도 같은 것을 할 수는 없습니다. – Sobrique

관련 문제