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.

就 象 我 们 在 第 八 章 , 引 用 , 里 提 到 的 一 样 , 在 <strong>Perl</strong> 里 的 面 向 对 象 的 编 程 是 通 过 引 用 来 实 现的 , 这 些 引 用 的 引 用 物 知 道 它 们 属 于 哪 些 类 。 实 际 上 , 如 果 你 知 道 引 用 , 那 么 你 就 知 道 几 乎所 有 有 关 对 象 的 困 难 。 剩 下 的 就 是 “ 放 在 你 的 手 指 下 面 ”, 就 象 画 家 会 说 的 那 样 。 当 然 , 你 需要 做 一 些 练 习 。你 的 基 本 练 习 之 一 就 学 习 如 何 保 护 不 同 的 代 码 片 段 , 避 免 被 其 他 人 的 变 量 不 小 心 篡 改 。 每 段代 码 都 属 于 一 个 特 定 的 包 , 这 个 包 决 定 它 里 面 有 哪 些 变 量 和 代 码 可 以 使 用 。 当 <strong>Perl</strong> 碰 到 一段 代 码 的 时 候 , 这 段 代 码 就 被 编 译 成 我 们 叫 做 当 前 包 的 东 西 。 最 初 的 当 前 包 叫 做 “main”,不 过 你 可 以 用 package 声 明 在 任 何 时 候 把 当 前 的 包 切 换 成 另 外 一 个 。 当 前 包 决 定 使 用 哪个 符 号 表 查 找 你 的 变 量 , 子 过 程 ,I/O 句 柄 和 格 式 等 。任 何 没 有 和 my 关 联 在 一 起 的 变 量 声 明 都 是 和 一 个 包 相 关 联 的 —— 甚 至 是 一 些 看 起 来 无所 不 在 的 变 量 , 比 如 $_ 和 %SIG。 实 际 上 , 在 <strong>Perl</strong> 里 实 际 上 没 有 全 局 变 量 这 样 的 东 西 。( 特 殊 的 标 识 符 , 比 如 _ 和 SIG, 只 是 看 上 去 象 全 局 变 量 , 因 为 它 们 缺 省 时 属 于 main 包 ,而 不 是 当 前 包 。)package 声 明 的 范 围 从 声 明 本 身 开 始 直 到 闭 合 范 围 的 结 束 ( 块 , 文 件 , 或 者 eval—— 以先 到 为 准 ) 或 者 直 到 其 他 同 层 次 的 package 声 明 , 它 会 取 代 前 面 的 那 个 。( 这 是 个 常 见的 实 践 。)所 有 随 后 的 标 识 符 ( 包 括 那 些 用 our 声 明 的 , 但 是 不 包 括 那 些 用 my 或 者 那 些 用 其 他 包名 字 修 饰 的 的 变 量 。) 都 将 放 到 属 于 当 前 包 的 符 号 表 中 。( 用 my 声 明 的 变 量 独 立 于 包 ;它 们 总 是 属 于 包 围 它 们 的 闭 合 范 围 , 而 且 也 只 属 于 这 个 范 围 , 不 管 有 什 么 包 声 明 。)通 常 , 一 个 package 声 明 如 果 是 一 个 文 件 的 第 一 个 语 句 的 话 就 意 味 着 它 将 被 require 或者 use 包 含 。 但 这 只 是 习 惯 , 你 可 以 在 任 何 可 以 放 一 条 语 句 的 地 方 放 一 个 package 声 明 。你 甚 至 可 以 把 它 放 在 一 个 块 的 结 尾 , 这 个 时 候 它 将 没 有 任 何 作 用 。 你 可 以 在 多 于 一 个 的 地 方切 换 到 一 个 包 里 面 ; 包 声 明 只 是 为 该 块 剩 余 的 部 分 选 择 将 要 使 用 的 符 号 表 。( 这 也 是 一 个 包实 现 跨 越 多 个 文 件 的 方 法 。)你 可 以 引 用 其 他 包 里 的 标 识 符 ( 注 : 我 们 说 的 标 识 符 的 意 思 是 用 做 符 号 表 键 字 的 东 西 , 可 以用 来 访 问 标 量 变 量 , 数 组 变 量 , 子 过 程 , 文 件 或 者 目 录 句 柄 , 以 及 格 式 等 。 从 语 法 上 来 说 ,标 签 (Label) 也 是 标 识 符 , 但 是 它 们 不 会 放 到 特 定 的 符 号 表 里 ; 相 反 , 它 们 直 接 附 着 在 你的 程 序 里 的 语 句 上 面 。 标 签 不 能 用 包 名 字 修 饰 。), 方 法 是 用 包 名 字 和 双 冒 号 做 前 缀 (“ 修饰 ”):$Package::Variable。 如 果 包 名 字 是 空 , 那 么 就 假 设 为 main 包 。 也 就 是 说 ,$::sail等 于 $main::sail。( 注 : 为 了 把 另 外 一 点 容 易 混 淆 的 概 念 理 清 楚 , 在 变 量 名 $main::sail里 , 我 们 对 main 和 sail 使 用 术 语 “ 标 识 符 ”, 但 不 把 main::sail 称 做 标 识 符 。 我 们 叫它 一 个 变 量 名 。 因 为 标 识 符 不 能 包 含 冒 号 。)266

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

Saved successfully!

Ooh no, something went wrong!