2014-02-13 20 views
1

下面是代碼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時推入數組,但它仍然顯示內存地址,任何人都可以告訴我如何將其更改爲顯示數組內容。

+0

使用'while(my $ seq_no = ){chomp $ seq_no; ......因爲你不用'$ _'。 –

回答

5

當你這樣做:

push @sequence,\@this_seq; 

你是推一個參考@this_seq到@sequence,所以在最後@sequence,包含兩個到兩個獨立的陣列。如果這是你的意圖,那麼你可以這樣打印出來:

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

這將在兩個單獨的行上打印兩個數組的內容。外循環遍歷數組引用,'join'語句將每個數組ref的內容連接在一起(請注意@ $ seq取消引用$ seq中包含的數組引用)。

另外請注意,我用的加盟 - 如果你只是打印一個這樣的數組:

print @$seq; 

將打印數組的內容,但它不會有各要素之間的逗號,所以纔沒有最後成爲換行符。

相關問題