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.3.2 把 一 个 BLOCK 块 当 作 变 量 名 用你 不 仅 可 以 对 一 个 简 单 的 变 量 名 字 进 行 解 引 用 , 而 且 你 还 可 以 对 一 个 BLOCK 的 内 容 进 行解 引 用 。 在 任 何 你 可 以 放 一 个 字 母 数 字 标 识 符 当 变 量 或 者 子 过 程 名 字 一 部 分 的 地 方 , 你 都 可以 用 一 个 返 回 指 向 正 确 类 型 的 BLOCK 代 替 该 标 识 符 。 换 句 话 说 , 早 先 的 例 子 都 可 以 用 下面 这 样 的 方 法 明 确 化 :$bar = ${$scalarref};push(@{$arrayref}, $filename);${$arrayref}[0] = "January";@{$arrayref}[4..6] = qw/May June July/;${$hashref}{"KEY"} = "VALUE";@{$hashref}{"KEY", "KEY2"} = ("VAL1", "VAL2");&{$coderef}(1,2,3);更 不 用 说 :$refrefref = \\\"howdy";print ${${${$refrefref}}};当 然 , 在 这 么 简 单 的 情 况 下 使 用 花 括 弧 的 确 非 常 愚 蠢 , 但 是 BLOCK 可 以 包 含 任 意 地 表 达式 。 特 别 是 , 它 可 以 包 含 带 脚 标 的 表 达 式 。在 下 面 的 例 子 里 , 我 们 假 设 $dispatch{$index} 包 含 一 个 指 向 某 个 子 过 程 的 引 用 ( 有 时候 我 们 称 之 为 "coderef")。 这 个 例 子 带 着 三 个 参 数 调 用 该 子 过 程 :&{ $dispatch{$index} } (1, 2, 3);在 这 里 ,BLOCK 是 必 要 的 。 没 有 这 个 外 层 的 花 括 弧 对 ,<strong>Perl</strong> 将 把 $dispatch 当 作coderef 而 不 是 $dispatch{$index}。8.3.3 使 用 箭 头 操 作 符对 于 指 向 数 组 , 散 列 , 或 者 子 过 程 的 引 用 , 第 三 种 解 引 用 的 方 法 涉 及 到 使 用 -> 中 缀 操 作符 。 这 样 做 就 形 成 了 一 种 语 法 糖 , 这 样 就 让 我 们 可 以 更 容 易 访 问 独 立 的 数 组 或 者 散 列 元 素 ,或 者 间 接 地 调 用 一 个 子 过 程 。219

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

Saved successfully!

Ooh no, something went wrong!