perl get数组值不是内存地址

时间:2014-02-13 06:50:08

标签: arrays perl

这是代码

 open IN, '</root/Desktop/out.txt' or die "Cannot open file : $!";
 while (<IN>) {
 chomp $_;
 $seq_no= $_;
 my @this_seq=();
 if($seq_no=~ m/^complement\(/){
 push(@this_seq,1);
 $seq_no=~ s/complement\(//g;
 if($seq_no=~ m/^order/){
 push(@this_seq,2);
 $seq_no=~ s/order//g;
 $seq_no=~ s/\(//g;
 $seq_no=~ s/\)//g;
 #my @temp = split(/,/, $seq_no);
 push @this_seq,$seq_no;
 print "@this_seq    \n";
}

}
else
{
 $seq_no=~ s/\(//g;
 $seq_no=~ s/\)//g;
 push @this_seq,$seq_no;
#print "@this_seq \n";
 }
 push @sequence,\@this_seq;
 }
 print @sequence;

输出文件是

complement(order(1843..1881,1923..2001,2065..2147, 2216..2277,2330..2468))  
773..1447

但是当我打印@sequence时,它就会得到

ARRAY(0x119adb8)ARRAY(0x117e6b0)

我已经在推入数组时添加了@this_seq,但它仍然显示内存地址,任何人都可以告诉我如何更改它以显示数组内容。

1 个答案:

答案 0 :(得分:5)

当你这样做时:

push @sequence,\@this_seq;

你正在将对@this_seq的引用推送到@sequence,所以最后@sequence包含对两个独立数组的两个引用。如果那是你的意图那么你可以这样打印出来:

foreach my $seq (@sequence) {
    print join(',', @$seq),"\n";
}

这将在两个单独的行上打印两个数组的内容。外部循环遍历数组引用,'join'语句将每个数组引用的内容连接在一起(注意@ $ seq取消引用$ seq中包含的数组引用)。

另请注意,我使用了join - 如果您只是打印一个这样的数组:

print @$seq;

它将打印数组的内容,但每个元素之间不会有逗号,最后也不会有换行符。