2016-12-05 31 views
0

我有這樣的陣列:傳遞一個二維陣列,以子程序的perl

print ("Grade\n"); 
     for (my $j=0; $j < $size; $j++){ 
      for (my $i=0; $i < $sizeCol; $i++){ 
       print("$newMatrizGrades[$j][$i] "); 
      } 
      print ("\n"); 
     } 

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

在打印後可以看到的元素。但是當我進入日常生活時。以這種方式訪問​​數組$ [$ sizeNewArrayName],我得到一個地址,而不是值。 @ newArrayNames是一維數組,我可以訪問元素$ [1],$ [2],...,$ [$ sizeNewArrayName],沒有更多問題。有人可以幫助我嗎?

+1

請參閱此鏈接... http://stackoverflow.com/questions/5680147/passing-two-or-more-arrays-to-a-perl-subroutine應該可以幫助你...您必須對數組取消引用 –

+1

您不能將數組傳遞給subs。你有什麼相當於'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"; 
}