我正在編寫一個腳本,用於分析文件並希望將整個結果存儲在數組中。我跑成我歸結於以下代碼中的問題:將Perl數組放入散列表
use strict;
use warnings;
use Data::Dumper;
my @sections =();
my @sections1 = qw/sect1 sect2 sect3/;
my @sections2 = qw/sect4 sect5/;
my @textbooks =();
my $text1 = { title => "title1", author => "author1" };
my $text2 = { title => "title2", author => "author2" };
for (@sections1) {
push(@sections, $_);
}
$text1->{sections} = \@sections;
@sections =();
for (@sections2) {
push(@sections, $_);
}
push(@textbooks, $text1);
$text2->{sections} = \@sections;
print Dumper($text2);
push(@textbooks, $text2);
print Dumper(@textbooks);
第一打印自卸車的結果如下:
$VAR1 = {
'title' => 'title2',
'sections' => [
'sect4',
'sect5'
],
'author' => 'author2'
}
,第二個的結果爲:
$VAR1 = {
'sections' => [
'sect4',
'sect5'
],
'title' => 'title1',
'author' => 'author1'
};
$VAR2 = {
'title' => 'title2',
'sections' => $VAR1->{'sections'},
'author' => 'author2'
};
我對此有兩個問題,我確信它們是相關的。
我意識到第一部分是一個引用,以便它們包含我期望的第二部分。我認爲行
@sections=()
會創建一個新的數組,並在稍後進行新的引用。顯然我沒有正確地想到這一點。第二部分是怎麼回事?從
$text2
的輸出看來,它正確無誤,直到推送。
使用'@sections = [];'正是我所需要的。謝謝。 –