今天我们继续使用引用来构造使用嵌套的数据结构
我们有以下的一些数据,需要读取到合适的数据结构中, 把它们写在程序最后的数据段中:
__DATA__
name:tom age:18 height:173
name:cat age:22 height:155
name:easy age:25 height:169
name:perl age:19 height:177
每行的内容都是以键值对的形式来呈现的, 因此内层数据用散列比较合适, 外层我们这里选用数组来存储
我们来看下具体实现
首先定义外围数据结构, 数组:
my @users;
逐行读取data段数据:
while(<DATA>){
过滤掉空行:
next if /^\s*$/;
根据非空字符来分割数据, 我们得到的是数值对组成的数组:
my @values = split /\s+/, $_;
定义内层数据, 散列
my %hash;
逐一将键值队拆分成键和值, 并存入散列:
for my $val(@values){
my ($key, $value) = split ':', $val;
$hash{$key} = $value;
}
将存有键值数据的散列的引用存入外层数组, 注意,这边只能使用引用, 如果把散列直接存入数组, 会直接展开整个散列进行存储的:
push @users, \%hash;
}
读取数据:
for my $user(@users){
my %hash = %$user;
for my $key(keys %hash){
print "$key:$hash{$key} ";
}
print "\n";
}