2012-12-24 2 views
6

배열이 @allinfogoals이고이 배열을 다차원 배열로 만들고 싶습니다. 이러한 목표를 달성하기위한 시도로, 정말 같은 항목으로 배열을 추진하기 위해 노력하고있어 : 배열 괄호 안에 해당 항목은 내가 사전에있는 모든 개별 문자열배열을 항목으로 다른 배열에 푸시 - 다차원 배열을 만들지 않음

push @allinfogoals, ($tempcomponents[0], $tempcomponents[1], $singlehometeam); 

합니다. 그러나 나는 $allinfogoals[0]를 참조하는 경우, 나는 $tempcomponents[0]의 가치를 내가 $allinfogoals[0][0]를하려고하면 내가 얻을 :

이 가
Can't use string ("val of $tempcomponents[0]") as an ARRAY ref while "strict refs" in use 
가 내가 @allinfogoals 이러한 배열을 추가 할 수있는 방법

가 다차원 배열 만들기 위해?

답변

15

첫째,

push @allinfogoals, ($tempcomponents[0], $tempcomponents[1], $singlehometeam); 

전혀 아무것도하지 않고있는 괄호. 그것은 단지 작성의 이상한 방법입니다.

push(@allinfogoals, $tempcomponents[0], $tempcomponents[1], $singlehometeam); 

괄호 변경 우선 순위; 목록이나 배열을 만들지 않습니다.


이제 귀하의 질문에 답변 해주십시오. Perl에는 2 차원 배열과 같은 것이없고 배열에는 스칼라 만 저장할 수 있습니다. 해결 방법은 다른 배열에 대한 참조 배열을 만드는 것입니다.

$allinfogoals[0][0] 

같은

$allinfogoals[0]->[0] 
    aka 
${ $allinfogoals[0] }[0] 

에 대한 짧은 이유는, 당신은 배열에 값을 저장하고 최상위 배열에 해당 배열에 대한 참조를 넣어해야합니다.

my @tmp = (@tempcomponents[0,1], $singlehometeam); 
push @allinfogoals, \@tmp; 

하지만 Perl은이를 단순화하는 연산자를 제공합니다.

push @allinfogoals, [ @tempcomponents[0,1], $singlehometeam ]; 
3

정확하게 확실하지 않음이 작동하지만이하는 이유는 ...

반복자를 만드는 데 필요한
push (@{$allinfogoals[$i]}, ($tempcomponents[0], $tempcomponents[1], $singlehometeam)); 

, $i이 작업을 수행합니다.


@ikegami에 따르면 다음과 같은 이유가 있습니다. 그것을 사용 $i없이 달성 할 수

$allinfogoals[$i] = [ $tempcomponents[0], $tempcomponents[1], $singlehometeam ]; 

에 해당 할 autovivification을 이용하여 서면으로

@{$allinfogoals[$i]} = ($tempcomponents[0], $tempcomponents[1], $singlehometeam); 

의 이상한 방법 경우에만 $allinfogoals[$i] 경우 작동

은 정의되지 않은

push @allinfogoals, [ $tempcomponents[0], $tempcomponents[1], $singlehometeam ]; 

마지막 스킵 애완 동물은 내 대답에 자세히 설명되어 있습니다. 모든

+3

이것은 왜 작동하는지 설명 할 수 있습니다 ... http : //perldoc.perl.org/perlreftut.html – squiguy

관련 문제