这是代码
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,但它仍然显示内存地址,任何人都可以告诉我如何更改它以显示数组内容。
答案 0 :(得分:5)
当你这样做时:
push @sequence,\@this_seq;
你正在将对@this_seq的引用推送到@sequence,所以最后@sequence包含对两个独立数组的两个引用。如果那是你的意图那么你可以这样打印出来:
foreach my $seq (@sequence) {
print join(',', @$seq),"\n";
}
这将在两个单独的行上打印两个数组的内容。外部循环遍历数组引用,'join'语句将每个数组引用的内容连接在一起(注意@ $ seq取消引用$ seq中包含的数组引用)。
另请注意,我使用了join - 如果您只是打印一个这样的数组:
print @$seq;
它将打印数组的内容,但每个元素之间不会有逗号,最后也不会有换行符。