2016-12-05 5 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-мерный массив, который я могу получить доступ к элементам $ [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 сбрасывает аргументы подпрограммы в один длинный список (и поэтому не может идентифицировать отдельные переменные списка/массива), поэтому в этом случае вам нужно отправить ссылки на массивы, а затем разыскать их в пределах sub, когда вы идете использовать их:

use warnings; 
use strict; 

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

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

    for (@$names){ 
     # do something 
    } 

    print "$grades->[0][0]\n"; 
} 
Смежные вопросы