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.

那 么 我 们 说 的 就 是 硬 引 用 。 图 8-1 描 述 了 一 个 叫 $bar 的 变 量 引 用 了 一 个 叫 $foo 的 变 量的 内 容 , 而 $foo 的 值 是 “bot”。和 符 号 引 用 不 同 的 是 , 真 实 引 用 所 引 用 的 不 是 另 外 一 个 变 量 的 名 字 ( 名 字 只 是 一 个 数 值 的 容器 ), 而 是 实 际 的 数 值 本 身 , 是 一 些 内 部 的 数 据 团 。 我 们 没 有 什 么 好 字 眼 来 描 述 这 样 的 东 西 ,可 是 我 们 又 不 得 不 描 述 , 于 是 我 们 就 叫 它 引 用 。 举 例 来 说 , 假 如 你 创 建 了 一 个 指 向 某 个 词 法范 围 数 组 @array 的 硬 引 用 。 那 么 , 即 使 在 @array 超 出 了 范 围 之 后 , 该 引 用 以 及 它 所引 用 的 参 考 物 也 仍 然 继 续 存 在 。 一 个 引 用 只 有 在 对 它 的 所 有 引 用 都 消 失 之 后 才 会 被 摧 毁 。除 了 指 向 它 的 引 用 之 外 , 引 用 实 际 上 并 没 有 自 己 的 名 字 。 换 句 话 说 , 每 个 <strong>Perl</strong> 变 量 都 存 储在 某 个 符 号 表 里 , 保 存 着 一 个 指 向 所 引 用 的 东 西 的 硬 引 用 ( 否 则 就 没 有 名 字 )。 引 用 物 可 以很 简 单 , 比 如 一 个 数 字 或 者 字 串 , 也 可 以 很 复 杂 , 比 如 一 个 数 组 或 散 列 。 不 管 哪 种 情 况 , 从变 量 到 数 值 之 间 都 只 有 一 个 引 用 。 你 可 以 创 建 指 向 相 同 引 用 物 的 额 外 的 引 用 , 但 该 变 量 并 不知 道 ( 或 在 乎 ) 这 些 引 用 。( 注 : 如 果 你 觉 得 奇 怪 , 那 么 你 可 以 用 Devel::Peek 模 块 计算 引 用 计 数 , 这 个 包 是 和 <strong>Perl</strong> 捆 绑 发 布 的 。)符 号 引 用 只 是 一 个 字 串 , 它 的 值 碰 巧 和 包 的 符 号 表 里 什 么 东 西 的 名 字 相 同 。 它 和 你 平 时 处 理的 字 串 没 有 什 么 太 大 的 区 别 。 但 是 硬 引 用 却 是 完 全 不 同 的 家 伙 。 它 是 三 种 基 本 的 标 量 类 型 中的 第 三 种 , 其 他 两 种 是 字 串 和 数 字 。 硬 引 用 除 了 指 向 某 些 事 物 之 外 并 不 知 道 它 们 的 名 字 , 并且 这 些 引 用 物 在 一 开 始 的 时 候 并 没 有 名 字 也 是 非 常 正 常 的 事 情 。 这 样 的 未 名 引 用 叫 做 匿 名 ,我 们 将 在 下 面 的 “ 匿 名 数 据 ” 里 讨 论 它 们 。在 本 章 的 术 语 里 , 引 用 一 个 数 值 就 是 创 建 一 个 指 向 它 的 硬 引 用 。( 我 们 有 一 个 操 作 符 用 于 这种 创 建 动 作 )。 这 样 创 建 的 引 用 只 是 一 个 简 单 的 标 量 , 它 和 所 有 其 他 标 量 一 样 在 我 们 熟 悉 的环 境 里 有 着 一 样 的 行 为 。 给 这 个 标 量 解 引 用 ( 析 引 用 ) 意 味 着 我 们 使 用 这 个 引 用 访 问 引 用 物 。引 用 和 解 引 用 都 是 只 发 生 在 某 些 明 确 的 机 制 里 , 在 <strong>Perl</strong> 里 从 来 不 会 出 现 隐 含 地 引 用 或 解 引用 的 现 象 。 哦 , 是 几 乎 从 来 不 发 生 。一 次 函 数 调 用 可 以 使 用 明 确 的 引 用 传 参 语 意 —— 只 要 它 有 这 样 声 明 的 原 型 。 如 果 是 这 样 , 那么 函 数 的 调 用 者 并 不 明 确 地 传 递 一 个 引 用 , 但 是 你 在 函 数 里 面 还 是 要 明 确 的 对 它 ( 参 数 ) 进行 解 引 用 。 参 阅 第 六 章 , 子 过 程 , 里 的 “ 原 型 ” 节 。 如 果 从 绝 对 诚 实 的 角 度 出 发 , 那 么 你 在 使用 某 些 类 型 的 文 件 句 柄 的 时 候 仍 然 是 有 一 些 隐 藏 在 幕 后 的 解 引 用 发 生 , 但 是 这 么 做 是 为 了 保持 向 下 兼 容 , 并 且 对 于 那 些 偶 然 使 用 到 的 用 户 来 说 是 透 明 的 。 最 后 , 有 两 个 内 建 的 函 数 ,bless 和 block, 它 们 都 接 受 一 个 引 用 作 为 自 己 的 参 数 , 但 是 都 会 隐 含 地 对 这 些 引 用 进 行解 引 用 以 实 现 各 自 的 功 能 。 不 过 除 了 我 们 这 里 招 供 的 这 些 以 外 , 基 本 的 概 念 还 是 一 致 的 , 那就 是 <strong>Perl</strong> 并 不 想 介 入 你 自 己 的 间 接 层 次 中 。209

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

Saved successfully!

Ooh no, something went wrong!