13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

$TV{ $rec->{series} } = $rec;你 可 以 使 用 额 外 的 指 针 域 来 避 免 数 据 的 复 制 。 比 如 , 你 可 能 需 要 在 一 个 人 的 记 录 里 包 含 一 个“kids” ( 孩 子 ) 数 据 域 , 这 个 域 可 能 是 一 个 数 组 , 该 数 组 包 含 着 指 向 这 个 孩 子 自 己 记 录 的引 用 。 通 过 把 你 的 数 据 结 构 的 一 部 分 指 向 其 他 的 部 分 , 你 可 以 避 免 因 为 在 一 个 地 方 更 新 数 据而 没 有 在 其 他 地 方 更 新 数 据 造 成 的 数 据 倾 斜 :for $family (keys %TV) {my $rec = $TV{$family};# 临 时 指 针@kids = ();for $person ( @{$rec->{members}}) {if ($person->{role} =~ /kid|son|daughter/) {push @kids, $person;}}# $rec 和 $TV{$family} 指 向 相 同 的 数 据 !$rec->{kids} = [@kids];}这 里 的 $rec->{kids} = [@kids] 赋 值 拷 贝 数 组 内 容 —— 但 它 们 只 是 简 单 的 引 用 , 而 没有 拷 贝 数 据 。 这 就 意 味 着 如 果 你 给 Bart 赋 予 下 面 这 样 的 年 龄 :$TV{simpsons}{kids}[0]{age}++; # 增 加 到 12那 么 你 就 会 看 到 下 面 的 结 果 , 因 为 $TV{simpsons}{kids}[0] 和$TV{simpsons}{members}[2] 都 指 向 相 同 的 下 层 匿 名 散 列 表 :print $TV{simpsons}{members}[2]{age}; # 也 打 印 12现 在 你 打 印 整 个 %TV 结 构 :for $family ( keys %TV ) {print "the $family";262

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!