2013-02-14 1 views
0

사람들,

내 이해대로라면 exists 함수는 해시에 키가 있는지 확인합니다. 따라서 아래에 언급 된 상황에서는 key1 또는 key2이 정의되지 않았습니다. 그 해시 참조 $var에는 키가 없습니다.

keys(%{$var})을 호출 할 때 undef가 반환되어야합니다.

어떻게 되가고 있느냐? 그 것이었다. 1. 나는 어떻게 여기에서 놓치고 있냐?

my $var; 
if (exists $var->{key1}->{key2}) { 
    $var->{key1}->{key2} = 1; 
} 

my $keys = keys(%{$var}); 

print $keys; #prints 1 to output console 
+0

참조 http://stackoverflow.com/q/14803604/725418 – TLP

답변

3

$ var -> {key1} -> {key2}를 확인하면 $ var -> {key1}이 빈 해시 참조로 생성됩니다.

use Data::Dumper; 
my $var = {}; 
if (exists $var->{key1}->{key2}) { 
    print "cannot happen\n" 
} 
print Dumper($var); 

인쇄 어느 : 이것은 수행하여 볼 수있는 하나의 키가 있기 때문에

$VAR1 = { 
      'key1' => {} 
     }; 

그래서 키의 스칼라는 1입니다.

+2

자동 진동이라고합니다. http://perldoc.perl.org/perlref.html을 참조하십시오. – simbabque

+0

감사합니다. 나는 항상 용어를 놓친다. –

0

이것은 autovivification입니다. no autovification;pragma를 사용하여 전체 스크립트 또는 특정 어휘 범위에 대한 자동 노출 기능을 해제 할 수 있습니다.