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.

1.8 列 表 处 理本 章 早 些 时 候 , 我 们 提 过 <strong>Perl</strong> 有 两 种 主 要 的 环 境 : 标 量 环 境 ( 处 理 单 个 的 事 物 ) 和 列 表 环境 ( 处 理 复 数 个 事 物 )。 我 们 描 述 过 的 很 多 传 统 操 作 符 都 是 严 格 在 标 量 环 境 下 执 行 。 他 们 总是 有 单 数 的 参 数 ( 或 者 象 双 目 操 作 符 一 样 有 一 对 单 数 的 参 数 ) 并 且 产 生 一 个 单 数 的 返 回 值 。甚 至 在 列 表 环 境 中 亦 如 此 。 当 你 使 用 下 面 的 代 码 :@array = (1 + 2, 3 - 4, 5 * 6, 7 / 8);你 知 道 右 边 的 的 列 表 中 包 含 四 个 值 , 因 为 普 通 数 学 操 作 符 总 是 产 生 标 量 , 即 使 是 在 给 一 个 数组 赋 值 这 样 的 列 表 环 境 中 。但 是 , 有 一 些 <strong>Perl</strong> 操 作 符 能 根 据 不 同 的 环 境 产 生 一 个 标 量 或 列 表 环 境 。 他 们 知 道 程 序 需 要标 量 环 境 还 是 列 表 环 境 。 但 是 你 如 何 才 能 知 道 ? 下 面 是 一 些 关 键 的 概 念 , 当 你 理 解 这 些 概 念之 后 , 你 就 能 很 容 易 地 知 道 需 要 标 量 还 是 列 表 了 。首 先 , 列 表 环 境 必 须 是 周 围 的 事 物 提 供 的 , 在 上 个 例 子 中 , 列 表 赋 值 提 供 了 列 表 环 境 。 早 些时 候 , 我 们 看 到 过 foreach 循 环 也 能 提 供 列 表 环 境 。 还 有 print 操 作 符 也 能 提 供 。 但 是你 不 必 逐 个 学 习 他 们 。如 果 你 通 读 本 书 其 余 部 分 种 不 同 的 语 法 说 明 , 你 会 看 到 一 些 操 作 符 定 义 为 使 用 LIST 作 为参 数 。 这 就 是 提 供 列 表 环 境 的 操 作 符 。 在 本 书 中 ,LIST 作 为 一 种 特 殊 的 技 术 概 念 表 示 ” 提供 列 表 环 境 的 句 法 ”。 例 如 , 你 观 察 sort, 你 可 以 总 结 为 :sort LIST这 表 示 ,sort 给 它 的 参 数 提 供 了 一 个 列 表 环 境 。其 次 , 在 编 译 的 时 候 ( 当 <strong>Perl</strong> 分 析 你 的 程 序 , 并 翻 译 成 内 部 操 作 码 的 时 候 ), 任 何 使 用 LIST的 操 作 符 给 LIST 的 每 个 语 法 元 素 提 供 了 列 表 环 境 。 因 此 , 在 编 译 的 时 候 , 每 个 顶 层 操 作符 和 LIST 中 的 每 个 元 素 都 知 道 <strong>Perl</strong> 假 设 它 们 使 用 自 己 知 道 的 方 法 生 成 最 好 的 列 表 。 例如 当 你 使 用 下 面 的 代 码 :sort @dudes, @chicks, other();那 么 @dudes,@chicks, 和 other() 都 知 道 在 编 译 的 时 候 <strong>Perl</strong> 假 设 它 们 都 产 生 一 个 列表 值 而 不 是 一 个 标 量 值 。 因 此 编 译 器 产 生 反 映 上 述 内 容 的 内 部 操 作 码 。其 后 , 在 运 行 时 候 ( 当 内 部 执 行 码 被 实 际 解 释 的 时 候 ), 每 个 LIST 成 员 按 顺 序 产 生 列 表 ,然 后 将 所 有 单 独 的 列 表 连 接 在 一 起 ( 这 很 重 要 ), 形 成 一 个 单 独 的 列 表 。 并 且 这 个 平 面 的 一维 列 表 最 后 由 那 些 需 要 LIST 的 函 数 使 用 。 因 此 如 果 @dudes 包 含 (Fred, Barney),46

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

Saved successfully!

Ooh no, something went wrong!