2011-12-09 3 views
3

필자는 perl을 처음 사용하고 perl로 작성된 코드를 읽었습니다. 라인은 다음과 같이 읽습니다perl에서이 변수의 데이터 구조는 무엇입니까?

$Map{$a}->{$b} = $c{$d}; 

내가 %samplehash처럼 보이는 해시 익숙하고 $samplehash{a}="b"

로 액세스하지만 위의 라인이 실제로지도 무엇인지에 대해 무엇을 말하는가?

+0

무엇입니까? perldoc을 참조하십시오. http://perldoc.perl.org/functions/map.html – yb007

+1

특정 데이터 구조를 이해해야 할 때 덤핑 변수가 큰 도움이됩니다. 그냥'Data :: Dumper'를 사용하고 나중에'print Dumper ($ Map);'를 사용하십시오. – musiKk

+2

@musiKk : 당신이'print Dumper (\ % Map);을 의미하는 것 같아요. – flesk

답변

10

을 감안할 때 이러한 변수 :

my $a = "apples"; 
my $b = "pears"; 
my %c = ("bananas" => 2); 
my $d = "bananas"; 
my %Map; 

해시에서

$Map{$a}->{$b} = $c{$d}; 

결과는 다음과 같이 찾고 할당 :

%Map = (
    "apples" => { 
     "pears" => 2 
    } 
); 

%Map은 해시입니다. 할당 후에 자동 노출을 통한 해시 참조가 포함되어 있습니다. 내부 해시 참조는 %Map 해시의 $Map{$a}->{$b} 요소에 액세스하여 Perl에 의해 자동으로 생성됩니다.

1

$ Map의 키 $ a 값은 $ b에 저장된 키 이름을 가진 연관 배열의 참조입니다.

%Map = ($a => { $b => $c{$d} }, ...)

5
$Map{$a}->{$b} 

%hash 대신 해시 $Map{$a} 기준을 사용

$hash{$b} 

같다

${ $Map{$a} }{$b} 

동일하다.

중첩 된 데이터 구조를 사용하는 방법에 대한 몇 가지 쉬운 규칙을 보려면 http://perlmonks.org/?node=References+quick+reference을 참조하십시오.

또한 autovivification을 사용하면 (기본값) $Map{$a}이 존재하지 않거나 undef로 시작하면 암시 적으로 새 해시 참조로 초기화됩니다.

관련 문제