2013-08-12 69 views
1

我在Perl中有一個2d數組。我將數組傳遞給子例程,並且我想修改2d數組的所有元素,然後返回並打印數組。我在下面附加了我的代碼。我遇到的問題實際上是更改每個單獨的元素並將該數組傳遞給子例程。二維數組:更改元素Perl

原始矩陣+代碼

 x   y  z 
CG -3.74900 -4.89100 -3.45400 
OD1 -6.45900 -6.29100 -6.08000 
OD2 -1.31600 -1.83300 -0.17600 

sub translateMatrixOperation 
{ 
my (@translatematrix, $x, $y, $z) = @_; 
print "PRINTING FIRST\n"; 
my $arrsize = scalar @translatematrix; 
for(my $i = 0; $i <= $arrsize; $i++) 
{ 
    for(my $j = 0; $j <= $arrsize; $j++) 
    { 
     if ($j == 0) 
     { 
      print "[$i][$j]:$translatematrix[$i][$j]\n"; 
      $_ = $_ - $x; 
     } 
     elsif ($j == 1) 
     { 
      print "[$i][$j]:$translatematrix[$i][$j]\n"; 
      $_ = $_ - $y; 
     } 
     elsif ($j == 2) 
     { 
      print "[$i][$j]:$translatematrix[$i][$j]\n"; 
      $_ = $_ - $z; 
     } 
    } 
} 
print "PRINTING\n"; 
for(my $i = 0; $i <= $arrsize; $i++) 
{ 
    for(my $j = 0; $j <= $arrsize; $j++) 
    { 
     print "$translatematrix[$i][$j] "; 
    } 
    print "\n"; 
} 
# return (\@translatematrix); 

} 我想要通過添加恆定值的x值,一個恆定值的y值,和一個恆定於z編輯整個陣列。我哪裏做錯了?

+0

關於風格,'爲(我的$ I = 0; $ I <= $ arrsize; $ I ++)'通常寫爲'我的$ I(0 .. $#ARR)''爲@ arr'陣列 –

+0

您是否考慮過使用[PDL](http://pdl.perl.org/)?應該使矩陣操作非常簡單。 – memowe

回答

2
my (@translatematrix, $x, $y, $z) = @_; 

沒有意義如@translatematrix吸食的所有元素從@_,並且應該是:

my ($translatematrix, $x, $y, $z) = @_; 

其中$translatematrix是數組引用。

 $_ = $_ - $x; 

應該更像

$translatematrix->[$i][$j] -= $x; 

,並且還類似的邏輯來$y$z應適用。

+0

這項技術可行,但它阻止我使用當前計算長度的方法。我該如何計算陣列的長度? – user2657817

+0

@ user2657817你可以改變參數順序即。 '我的($ x,$ y,$ z,@translatematrix)= @_;'所以數組是最後一個 –