我在Perl中有一个2d数组。我将数组传递给子程序,我想修改2d数组的所有元素,然后返回它并打印数组。我到目前为止附上了我的代码。我遇到的问题实际上是改变每个单独的元素并将数组传递给子程序。
原始矩阵+代码
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 :(得分:2)
my (@translatematrix, $x, $y, $z) = @_;
没有意义,因为@translatematrix
会掠过@_
中的所有元素,应该是:
my ($translatematrix, $x, $y, $z) = @_;
其中$translatematrix
是数组引用。
$_ = $_ - $x;
应该更像
$translatematrix->[$i][$j] -= $x;
以及与$y
和$z
类似的逻辑应该被应用。