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.

就 是 我 们 说 的 用 法 (pragmas)。 大 多 数 用 法 是 词 法 范 围 的 , 包 括 use strict 'vars' 用 法 ,这 个 用 法 强 制 你 在 使 用 前 先 声 明 变 量 。 参 阅 后 面 的 “ 用 法 ” 节 。很 有 意 思 的 是 , 尽 管 包 是 一 个 全 局 入 口 , 包 声 明 本 身 是 词 法 范 围 的 。 但 是 一 个 package 声明 只 是 为 闭 合 块 的 余 下 部 分 声 明 此 缺 省 包 的 身 份 。<strong>Perl</strong> 会 到 这 个 包 中 查 找 未 声 明 的 , 未 修饰 的 变 量 名 ( 注 : 还 有 未 定 义 的 子 过 程 , 文 件 句 柄 , 目 录 句 柄 和 格 式 )。 换 句 话 说 , 实 际 上从 来 没 有 声 明 什 么 包 , 只 是 当 你 引 用 了 某 些 属 于 那 些 包 的 东 西 的 时 候 才 突 然 出 现 。 当 然 这 就是 <strong>Perl</strong> 的 风 格 。4.7.1 范 围 变 量 声 明本 章 剩 下 的 大 部 分 内 容 是 关 于 使 用 全 局 变 量 的 。 或 者 换 句 话 说 , 是 关 于 ‘ 不 ’ 使 用 全 局 变 量 的 。有 各 种 各 样 的 声 明 可 以 帮 助 你 不 使 用 全 局 变 量 —— 或 者 至 少 不 会 愚 蠢 地 使 用 它 们 。我 们 已 经 提 到 过 package 定 义 , 它 在 很 早 以 前 就 引 入 <strong>Perl</strong> 了 , 这 样 就 允 许 全 局 量 可 以分 别 放 到 独 立 的 包 里 。 对 于 某 些 变 量 来 说 , 这 个 方 法 非 常 不 错 。 库 , 模 块 和 类 都 用 包 来 存 储它 们 的 接 口 数 据 ( 以 及 一 些 它 们 的 半 私 有 数 据 ) 以 避 免 和 你 的 主 程 序 或 者 其 他 模 块 的 变 量 或者 函 数 冲 突 。 如 果 你 看 到 某 人 写 到 $Some::stuff( 注 : 或 者 $Some'stuff, 不 过 我 们 不鼓 励 这 么 写 ), 他 们 是 在 使 用 来 自 包 Some 的 标 量 变 量 $stuff。 参 阅 第 十 章 。如 果 这 么 干 活 的 话 ,<strong>Perl</strong> 程 序 随 着 变 量 的 增 长 会 很 快 变 得 不 好 用 。 好 在 <strong>Perl</strong> 的 三 种 范 围声 明 让 它 很 容 易 做 下 面 这 些 事 : 创 建 私 有 变 量 ( 用 my), 进 行 有 选 择 地 访 问 全 局 变 量 ( 用our), 和 给 全 局 变 量 提 供 临 时 的 值 ( 用 local):my $nose;our $House;local $TV_channel;如 果 列 出 多 于 一 个 变 量 , 那 么 列 表 必 须 放 在 圆 括 弧 里 。 就 my 和 our 而 言 , 元 素 只 能 是简 单 的 标 量 , 数 组 或 者 散 列 变 量 。 就 local 而 言 , 其 构 造 可 以 更 宽 松 : 你 还 可 以 局 部 化 整个 类 型 团 和 独 立 的 变 量 或 者 数 组 和 散 列 的 片 段 :my($nose, @eyes, %teeth);our ($House, @Autos, %Kids);local (*Spouse, $phone{HOME});上 面 每 种 修 饰 词 都 给 它 们 修 饰 的 变 量 做 出 某 种 不 同 类 型 的 “ 限 制 ”。 简 单 说 :our 把 名 字 限于 一 个 范 围 ,local 把 值 限 于 一 个 范 围 以 及 my 把 名 字 和 值 都 限 于 一 个 范 围 。135

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

Saved successfully!

Ooh no, something went wrong!