13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

如 果 你 给 你 的 C 编 译 器 提 供 了 -DDEBUGGING 选 项 , 做 了 一 个 调 试 版 本 的 <strong>Perl</strong> , 那么 如 果 你 给 <strong>Perl</strong> 一 个 -Do 开 关 , 你 就 能 看 到 它 一 边 解 析 方 法 调 用 一 边 走 过 这 些 步 骤 。我 们 将 随 着 我 们 的 继 续 介 绍 更 详 细 地 讨 论 继 承 机 制 。第 十 二 章 对 象 ( 下 )12.5.1 通 过 @ISA 继 承如 果 @ISA 包 含 多 于 一 个 包 的 名 字 , 包 的 搜 索 都 是 从 左 向 右 的 顺 序 进 行 的 。 这 些 搜 索 是 由浅 入 深 的 , 因 此 , 如 果 你 有 一 个 Mule 类 有 象 下 面 这 样 的 继 承 关 系 :package Mule;our @ISA= ("Horse", "Donkey");<strong>Perl</strong> 将 首 先 在 Horse 里 ( 和 他 的 任 何 前 辈 类 里 , 比 如 Critter) 查 找 任 何 在 Mule 里 找不 到 的 方 法 , 找 不 到 以 后 才 继 续 在 Donkey 和 其 父 类 里 进 行 查 找 。如 果 缺 失 的 方 法 在 一 个 基 类 里 发 现 ,<strong>Perl</strong> 内 部 把 该 位 置 缓 存 在 当 前 类 里 , 依 次 提 高 效 率 ,这 样 要 查 找 该 方 法 的 时 候 , 它 不 用 再 跑 老 远 。 对 @ISA 的 修 改 或 者 定 义 新 的 方 法 就 会 令 该缓 存 失 效 , 因 此 导 致 <strong>Perl</strong> 再 次 执 行 查 找 。当 <strong>Perl</strong> 搜 索 一 个 方 法 的 时 候 , 它 确 信 你 没 有 创 建 一 个 闭 环 的 继 承 级 别 。 如 果 两 个 类 互 相 继承 则 可 能 出 现 这 个 问 题 , 甚 至 是 间 接 地 通 过 其 他 类 这 样 继 承 也 如 此 。 试 图 做 你 自 己 的 祖 父 即使 对 <strong>Perl</strong> 而 言 也 是 荒 谬 的 , 因 此 这 样 的 企 图 导 致 抛 出 一 个 例 外 。 不 过 , 如 果 从 多 于 一 个 类继 承 下 来 , 而 且 这 些 类 共 享 同 样 的 祖 宗 ,<strong>Perl</strong> 不 认 为 是 错 误 , 这 种 情 况 类 似 近 亲 结 婚 。 你的 继 承 级 别 看 起 来 不 再 象 一 棵 树 , 而 是 象 一 个 油 脂 分 子 图 。 不 过 这 样 不 会 为 难 <strong>Perl</strong>—— 只要 这 个 图 形 是 真 的 油 脂 分 子 。当 你 设 置 @ISA 的 时 候 , 赋 值 通 常 发 生 在 运 行 时 , 因 此 除 非 你 加 以 预 防 , 否 则 在 BEGIN,CHECK, 或 者 INIT 块 里 的 代 码 不 能 在 继 承 级 别 里 使 用 。 预 防 之 一 是 use base 用 法 ,它 令 你 require 类 并 且 在 编 译 时 把 它 加 入 @ISA 里 。 下 面 是 你 使 用 它 们 的 方 法 :packge Mule;300

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

Saved successfully!

Ooh no, something went wrong!