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.

上 面 对 splutter 的 两 个 调 用 都 打 印 "her um well a hmm"。如 果 编 译 器 还 没 有 看 到 特 定 的 THING, 那 么 *foo{THING} 这 样 的 构 造 返 回 undef。 而且 *foo{SCALAR} 返 回 一 个 指 向 一 个 匿 名 标 量 的 引 用 , 即 使 编 译 器 还 没 有 看 到 $foo。(<strong>Perl</strong> 总 是 给 任 何 类 型 团 加 一 个 标 量 , 它 把 这 个 动 作 当 作 一 个 优 化 , 以 便 节 省 其 他 的 什 么地 方 的 一 些 代 码 。 但 是 在 未 来 的 版 本 中 不 要 指 望 <strong>Perl</strong> 保 持 这 种 做 法 。)8.2.6 引 用 的 隐 含 创 建创 建 引 用 的 最 后 一 种 做 法 就 根 本 算 不 上 什 么 方 法 。 如 果 你 在 一 个 认 为 存 在 引 用 的 左 值 环 境 里做 解 引 用 的 动 作 , 那 么 引 用 就 会 自 动 出 现 。 这 样 做 是 非 常 有 用 的 , 并 且 它 也 是 你 希 望 的 。 这个 论 题 我 们 在 本 章 稍 后 探 讨 , 那 时 侯 我 们 将 讨 论 如 何 把 我 们 到 此 为 止 创 建 的 引 用 给 解 引 用掉 。8.3 使 用 硬 引 用就 象 我 们 有 无 数 的 方 法 创 建 引 用 一 样 , 我 们 也 有 好 几 种 方 法 使 用 引 用 ( 或 者 称 之 为 解 引 用 )。使 用 过 程 中 只 有 一 个 最 高 级 的 原 则 :<strong>Perl</strong> 不 会 做 任 何 隐 含 的 引 用 或 者 解 引 用 动 作 。( 注 :我 们 已 经 承 认 这 句 话 是 撒 了 一 个 小 谎 。 我 们 不 想 再 说 了 。) 如 果 一 个 标 量 挂 在 了 一 个 引 用 上 ,那 么 它 总 是 表 现 出 简 单 标 量 的 行 为 。 它 不 会 突 然 就 成 为 一 个 数 组 或 者 散 列 或 是 子 过 程 , 你 必须 明 确 地 告 诉 它 进 行 转 变 , 方 法 就 是 对 它 解 引 用 。8.3.1 把 一 个 变 量 当 作 变 量 名 使 用如 果 你 看 到 一 个 标 量 , 比 如 $foo, 你 应 该 把 它 看 成 “foo 的 标 量 值 。” 也 就 是 说 , 在 符 号 表里 有 一 条 foo 记 录 , 而 趣 味 字 符 $ 是 一 个 查 看 其 内 部 的 标 量 值 的 方 法 。 如 果 在 里 面 的 是一 个 引 用 , 那 么 你 可 以 通 过 在 前 面 再 增 加 一 个 趣 味 字 符 来 查 看 引 用 的 内 容 ( 解 引 用 )。 或 者用 其 他 方 法 查 看 它 , 你 可 以 把 $foo 里 的 文 本 字 串 foo 替 换 成 一 个 指 向 实 际 引 用 物 的 标 量变 量 。 这 样 做 对 任 何 变 量 类 型 都 是 正 确 的 , 因 此 不 仅 仅 $$foo 是 指 $foo 指 向 的 标 量 值 ,@$bar 是 $bar 指 向 的 数 组 值 , %$glarch 是 $glarch 指 向 的 散 列 数 值 , 等 等 。 结 果是 你 可 以 在 任 何 简 单 标 量 前 面 放 上 一 个 额 外 的 趣 味 字 符 将 它 解 引 用 :$foo= "three humps";$scalarref = \$foo; # $scalarref 现 在 是 一 个 指 向 $foo 的 引 用$camel_model = $$scalarref; # $camel_model 现 在 是 "three humps"下 面 是 其 他 的 一 些 解 引 用 方 法 :217

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

Saved successfully!

Ooh no, something went wrong!