【发布时间】:2014-11-18 20:49:16
【问题描述】:
我正在尝试将二维数组传递给子例程并返回一个新数组。在子例程中创建了一个新变量,但在调用子例程后初始数组发生了某种变化。同时,这种类型的一维数组也不存在问题。
代码如下:
#!/usr/bin/perl -w
use strict;
my @motifs=('1230','1011','2121');
my @empty_profile;
for (my $i=0;$i<4;$i++) {
for (my $j=0;$j<4;$j++) {
$empty_profile[$i][$j]=1/8;
}
}
for (my $i=0;$i<4;$i++) {
for (my $j=0;$j<4;$j++) {
print("$empty_profile[$i][$j] ");
}
print "\n";
}
my @new_profile=profile(\@motifs,\@empty_profile);
print("print it again\n");
for (my $i=0;$i<4;$i++) {
for (my $j=0;$j<4;$j++) {
print("$empty_profile[$i][$j] ");
}
print "\n";
}
sub profile {
my @motifs=@{$_[0]};
my @p=@{$_[1]};
for (my $i=0; $i<4;$i++) {
for (my $j=0;$j<3;$j++) {
my $l=substr($motifs[$j],$i,1);
$p[$l][$i]+=1/8;
}
}
@p;
}
它打印@empty_profile 2 次 - 在子例程调用之前和之后 - 并且它的值被更改。
【问题讨论】: