2009-09-10 4 views
0

좋아, 그래서 여기에 내가 만들려고하는 전체 구조가있다. 해시 값으로 사용할 수있는 익명 배열을 만들어야합니다. 이 내 프로그램에서 작동합니다 :배열을 Perl의 해시 값으로 사용하려면 어떻게해야합니까?

$result = { 
    count, 2, 
    elementList, [ 
     {name => "John Doe", age => 23}, 
     {name => "Jane Doe", age => 24} 
    ] 
}; 

나는 이와 같은 코드로 똑같은 것을 만들려고합니다.

my @elements = [ 
    {name => "John Doe", age => 23}, 
    {name => "Jane Doe", age => 24} 
]; 

$result = { 
    count, 2, 
    elementList, @elements 
}; 

을하지만이 작동하지 않습니다 :이 작동 당신은 당신의 배열에 배열 참조합니다 ([] 구문)을 할당하는

my @elements; 
push(@elements, {name => "John Doe", age => 23}); 
push(@elements, {name => "Jane Doe", age => 24}); 

$result = { 
    count, 2, 
    elementList, @elements 
}; 
+2

나머지 코드가 대괄호로 분리 된 경우 문제가있을 수 있습니다. 그것에 대한 도움이 필요하면 질문에 가져 오십시오. –

답변

7

다른 사람이 언급했듯이, 당신은 비정상적인 데이터 구조를 설명하고 있습니다 : 하나의 요소 만 가진 배열. 해시 값의 배열 참조입니다. 나는 당신이 정말로 어떤 이유로 그 구조를 원한다고 가정 할 것입니다. 당신이 $elements[0] 아닌 @elements 배열의 arrayref 위에 hashrefs를 밀어 원하기 때문에

my @elements = [ 
    {name => "John Doe", age => 23}, 
    {name => "Jane Doe", age => 24} 
]; 

my @elements = []; 
push(@{ $elements[0] }, {name => "John Doe", age => 23}); 
push(@{ $elements[0] }, {name => "Jane Doe", age => 24}); 

에 해당합니다.

하지만 요소가 하나 뿐인 배열은 일반적이지 않습니다.

my $elementsRef = []; 
push(@$elementsRef, {name => "John Doe", age => 23}); 
push(@$elementsRef, {name => "Jane Doe", age => 24}); 

또는이 :

my @elements; 
push(@elements, {name => "John Doe", age => 23}); 
push(@elements, {name => "Jane Doe", age => 24}); 

와 현재 @elements를 사용하는 경우 다음 \@elements를 사용 게시 한 추가 코드를 보면, 당신이 정말로 원하는 것은 이것이다.

둘 중 하나가 작동합니다. 어느 쪽이 더 좋은지 결정하는 것은 당신에게 달려 있습니다. 아마 두 번째 버전으로 갈 것입니다.

5

. 첫 번째이자 유일한 요소는 다른 요소를 지정하지 않았기 때문입니다.

대괄호 대신 괄호 ()을 사용하여 목록을 직접 지정하려고했습니다.

perldsc을 참조하십시오.

+0

perldsc를 언급하기 위해 +1 –

+0

괄호는 불필요합니다. 배열을 비우기 위해 @ array =()라고 말할 수도 있지만 'my @ array =()'는 필요하지 않습니다. – runrig

+0

@runrig : 사실 저는 첫 번째 코드 발췌문에서 괄호에 대해 이야기하고있었습니다. 어레이 제작에 대해 당신과 동의합니다. –

3

대괄호가 잘못되었습니다.

당신은 실제로이 같은 구조를 구축해야합니다

my @elements = (
    {name => "John Doe", age => 23}, 
    {name => "Jane Doe", age => 24} 
); 

루프에서 그것을하기를,이 코드를 수정해야합니다

my @elements; # same as my @elements =(); 
push(@elements, {name => "John Doe", age => 23}); 
push(@elements, {name => "Jane Doe", age => 24}); 

그 이유는 대괄호입니다 배열에 대한 참조를 작성하십시오. 배열에 대한 참조는 배열과 동일한 것이 아닙니다.

배열에 할당 할 요소의 목록을 만들려면 둥근 괄호 ()을 사용하십시오.

3

[]은 빈 배열을 참조합니다. 하나의 요소로 배열을 생성하고 있습니다. 빈 배열을 만들려면 my @elements;라고 말하십시오.

관련 문제