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.

假 设 现 在 $array[3] 是 未 定 义 。 那 么 下 面 的 语 句 仍 然 合 法 :$array[3]->{"English"}->[0] = "January";这 个 东 西 就 是 我 们 在 前 面 提 到 过 的 引 用 突 然 出 现 的 例 子 , 这 时 候 , 当 引 用 用 做 左 值 的 时 候 是自 动 激 活 的 ( 也 就 是 说 , 当 给 它 赋 予 数 值 的 时 候 )。 如 果 $array[3] 是 未 定 义 , 那 么 它 会被 自 动 定 义 成 一 个 散 列 引 用 , 这 样 我 们 就 可 以 在 它 里 面 给 $array[3]->{"English"} 设 置一 个 数 值 。 一 旦 这 个 动 作 完 成 , 那 么 $array[3]->{"English"} 自 动 定 义 成 一 个 数 组 引 用 ,这 样 我 们 就 可 以 给 那 个 数 组 的 第 一 个 元 素 赋 一 些 东 西 。 请 注 意 右 值 稍 微 有 些 不 同 :print$array[3]->{"English"}->[0] 只 定 义 了 $array[3] 和 $array[3]->{"English"},没 有 定 义 $array[3]->{"English"}->[0], 因 为 最 后 一 个 元 素 不 是 左 值 。( 你 可 以 认 为前 面 两 个 在 右 值 环 境 里 有 定 义 是 一 只 臭 虫 。 我 们 将 来 可 能 除 掉 这 只 虫 子 。)在 方 括 弧 或 花 括 弧 之 间 , 或 者 在 一 个 闭 方 括 弧 或 花 括 弧 与 圆 括 弧 之 间 的 箭 头 是 可 选 的 。 后 者表 示 间 接 的 函 数 调 用 。 因 此 你 可 以 把 前 面 的 代 码 缩 减 成 :$dispatch{$index}(1, 2, 3);$array[3]{"English"}[0] = "January";在 普 通 的 数 组 的 情 况 下 , 这 些 东 西 给 你 一 个 多 维 的 数 组 , 就 好 象 C 的 数 组 :$answer[$x][$y][$z] += 42;当 然 , 并 不 完 全 象 C 的 数 组 。 其 中 之 一 就 是 C 的 数 组 不 会 按 照 需 要 增 长 , 而 <strong>Perl</strong> 的 却会 。 而 且 , 一 些 在 两 种 语 言 里 相 似 的 构 造 是 用 不 同 的 方 法 分 析 的 。 在 <strong>Perl</strong> 里 , 下 面 的 两 个语 句 做 的 事 情 是 一 样 的 :$listref->[2][2] = "hello";$$listref[2][2] = "hello";# 相 当 干 净# 有 点 混 乱上 面 第 二 句 话 可 能 会 让 C 程 序 员 觉 得 诧 异 , 因 为 C 程 序 员 习 惯 于 使 用 *a[i] 表 示 “a 的第 i 个 元 素 所 指 向 的 内 容 ”。 但 是 在 <strong>Perl</strong> 里 , 五 个 元 素 ($ @ * % &) 实 际 上 比 花 括 弧或 者 方 括 弧 绑 定 得 都 更 紧 密 。( 注 : 但 不 是 因 为 操 作 符 优 先 级 。 在 <strong>Perl</strong> 里 的 趣 味 字 符 不 是操 作 符 。<strong>Perl</strong> 的 语 法 只 是 简 单 地 禁 止 任 何 比 一 个 简 单 变 量 或 者 块 更 复 杂 的 东 西 跟 在 趣 味 字符 后 面 , 个 中 缘 由 也 是 有 很 多 有 趣 的 原 因 的 。) 因 此 , 被 当 作 指 向 一 个 数 组 引 用 的 是$$listref 而 不 是 $listref[2]。 如 果 你 想 要 C 的 行 为 , 你 要 么 是 写 成 ${$listref[2]} 以强 迫 $listref[2] 先 于 前 面 的 $ 解 引 用 操 作 符 计 算 , 要 么 你 就 要 使 用 -> 表 示 法 :$listref[2]->{$greeting} = "hello";221

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

Saved successfully!

Ooh no, something went wrong!