2016-12-05 2 views
0

에 2 차원 어레이를 전달 I이 배열을 가지고있다. 하지만 내가 루틴 안에있을 때. 이런 식으로 $ [$ sizeNewArrayName] 배열을 처리하면 값 대신 주소가 생깁니다. @newArrayNames는 1 차원 배열로, 더 많은 문제점없이 $ [1], $ [2], ..., $ [$ sizeNewArrayName] 요소에 액세스 할 수 있습니다. 누군가 나를 도울 수 있니?서브 루틴 펄

+1

이 링크를 참조하십시오 ... http://stackoverflow.com/questions/5680147/passing-two-or-more-arrays-to-a-perl-subroutine 당신을 도움이 될 것입니다 ... 배열을 참조 해제해야합니다. –

+1

배열을 서브 클래스로 전달할 수 없습니다. 당신이 가지고있는 것은'newSubject ($ name, $ newArayNames [0], $ newArayNames [1], ..., $ newMatrizGrades [0], $ newMatrizGrades [1], ...)'에 해당합니다. 대신. – ikegami

답변

1

Perl은 하나의 긴 목록으로 서브 루틴 인수를 매시 (따라서 별도의 목록/배열 변수를 식별 할 수 없음)합니다. 따라서이 경우 배열에 대한 참조를 보내고 하위 참조를 참조해야합니다. 당신이 그들을 사용하는 이동 :

use warnings; 
use strict; 

newSubject($name, \@newArrayNames, \@newMatrizGrades); 

sub newSubject { 
    my ($name, $names, $grades) = @_; 

    for (@$names){ 
     # do something 
    } 

    print "$grades->[0][0]\n"; 
}