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.

$object = tied VARIABLE;上 面 两 行 等 效 于 :$object = tie VARIABLE, CLASSNAME, LIST;一 旦 该 变 量 被 捆 绑 , 你 就 可 以 按 照 平 时 那 样 对 待 该 普 通 变 量 , 不 过 每 次 访 问 都 自 动 调 用 下 层对 象 的 方 法 ; 所 有 该 类 的 复 杂 性 都 隐 藏 在 那 些 方 法 调 用 的 背 后 。 如 果 稍 后 你 想 打 破 变 量 和 类之 间 的 关 联 , 你 可 以 untie ( 松 绑 ) 那 个 变 量 :untie VARIABLE;你 几 乎 完 全 可 以 把 tie 看 作 一 种 有 趣 的 bless 类 型 , 只 不 过 它 是 给 一 个 光 秃 秃 的 变 量 赐福 , 而 不 是 给 一 个 对 象 引 用 赐 福 。 它 同 样 还 可 以 接 收 额 外 的 参 数 , 就 象 构 造 器 那 样 —— 这 个恐 怕 也 不 新 鲜 了 , 因 为 它 实 际 上 就 是 在 内 部 调 用 一 个 构 造 器 , 该 构 造 器 的 名 字 取 决 于 你 尝 试的 变 量 类 型 : 是 TIESCALAR,TIEARRAY,TIEHASH, 或 者 TIEHANDLE。( 注 : 因 为这 些 构 造 器 是 独 立 的 名 字 , 你 甚 至 可 以 提 供 一 个 独 立 的 类 来 实 现 它 们 。 那 样 , 你 就 可 以 把 标量 , 数 组 , 散 列 , 和 文 件 句 柄 统 统 绑 定 到 同 一 个 类 上 , 不 过 通 常 不 是 这 么 干 的 , 因 为 它 会 令其 他 的 魔 术 方 法 比 较 难 写 。) 调 用 这 些 构 造 器 的 时 候 , 它 们 用 所 声 明 的 CLASSNAME 为它 们 的 调 用 者 作 为 类 方 法 调 用 , 另 外 把 你 放 在 LIST 里 的 任 何 东 西 作 为 附 加 的 参 数 。(VARIABLE 并 不 传 递 给 构 造 器 。)这 四 种 构 造 器 每 种 都 返 回 一 个 普 通 风 格 的 对 象 。 它 们 并 不 在 乎 它 们 是 否 从 tie 里 调 用 的 ,类 里 的 其 他 方 法 也 不 在 意 , 因 为 如 果 你 喜 欢 的 话 你 总 是 可 以 直 接 调 用 它 们 。 从 某 种 意 义 来 说 ,所 有 魔 术 都 是 在 tie 里 , 而 不 是 在 实 现 tie 的 类 里 。 该 类 只 是 一 个 有 着 有 趣 的 方 法 名 的 普通 类 。( 实 际 上 , 有 些 捆 绑 的 模 块 提 供 了 额 外 的 一 些 方 法 , 这 些 方 法 是 不 能 通 过 捆 绑 的 变 量看 到 的 ; 你 必 须 明 确 调 用 这 些 方 法 , 就 象 你 对 待 其 他 对 象 方 法 一 样 。 这 样 的 额 外 方 法 可 以 提供 类 似 文 件 锁 , 事 务 保 护 , 或 者 任 何 其 他 实 例 方 法 可 以 做 的 东 西 。)因 此 这 些 构 造 器 就 象 其 他 构 造 器 那 样 bless( 赐 福 ) 并 且 返 回 一 个 对 象 引 用 。 该 引 用 不 需 要指 向 和 被 捆 绑 的 变 量 相 同 类 型 的 变 量 ; 它 只 是 必 须 被 赐 福 , 所 以 该 绑 定 的 变 量 可 以 很 容 易 在你 的 类 中 找 到 支 持 。 比 如 , 我 们 的 长 例 子 TIEARRAY 就 会 用 一 个 基 于 散 列 的 对 象 , 这 样 它就 可 以 比 较 容 易 地 保 存 它 在 模 拟 的 数 组 的 附 加 信 息 。tie 函 数 不 会 为 你 use 或 者 require 一 个 模 块 —— 如 果 必 要 的 话 , 在 调 用 tie 前 你 必 须 自己 明 确 地 做 那 件 事 。( 另 外 , 为 了 保 持 向 下 兼 容 ,dbmopen 函 数 会 尝 试 use 一 个 或 者 某个 DBM 实 现 。 但 你 可 以 用 一 个 明 确 的 use 修 改 它 的 选 择 优 先 级 —— 只 要 你 use 的 模 块是 在 dbmopen 的 模 块 列 表 中 的 一 个 。 参 阅 AnyDBM ? _File 模 块 的 在 线 文 档 获 取 更 完 善的 解 释 。)348

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

Saved successfully!

Ooh no, something went wrong!