我讀過參考文檔,但我無法弄清楚如何取消引用數組中的數組引用。 不明白爲什麼@{$HoA{$cols[0]}}
只打印數組的長度。任何澄清非常感謝。Perl中的引用數組
file.txt
:
aa bb
bb cc
程序:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
# my $filename = "file.txt";
my @newarray;
my %HoA = (
aa => [ "GAT_1", "GAT_2", "GAT_3", "GAT_4" ],
bb => [ "GAT_6", "GAT_1", "GAT_5", "GAT_4", "GAT_2" ],
cc => [ "GAT_6", "GAT_4", "GAT_3", "GAT_1", "GAT_2" ],
);
open (FILE, '<' ,"$filename") or print "$filename does not exist\n";
while (<FILE>) {
my @cols = split;
$cols[0] = $HoA{ $cols[0] };
#$cols[0] = @{$HoA{ $cols[0]} };
$cols[1] = $HoA{ $cols[1] };
#$cols[1] = @{$HoA{ $cols[1] }};
push (@newarray, join(" ", @cols));
}
close FILE;
print Dumper(\@newarray);
這是我期望的輸出:
$VAR1 = [
[
[
'GAT_1',
'GAT_2',
'GAT_3',
'GAT_4'
],
[
'GAT_6',
'GAT_1',
'GAT_5',
'GAT_4',
'GAT_2'
],
[
'GAT_6',
'GAT_1',
'GAT_5',
'GAT_4',
'GAT_2'
],
[
'GAT_6',
'GAT_4',
'GAT_3',
'GAT_1',
'GAT_2'
],
]
];
這是我的實際輸出:
$VAR1 = [
'ARRAY(0x7f80110060e8) ARRAY(0x7f801102eb58)',
'ARRAY(0x7f801102eb58) ARRAY(0x7f801102f308)'
];
Re「*我無法弄清楚如何取消引用數組中的數組引用*」,從技術上講,你是否正在引用它。你期待什麼輸出? – ikegami
Re「*不明白爲什麼'@ {$ HoA {$ cols [0]}}'只輸出數組的長度*」,'@ {$ HoA {$ cols [0]}}'不會打印什麼。標量上下文中的「@ a」計算數組中元素的數量。因此,標量上下文中的「@ {REF}」將評估引用數組中元素的數量。 – ikegami
您的預期產出是什麼?你的連接將數組引用視爲字符串,但沒有預期的輸出,很難知道你應該做什麼 – ysth