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.

C 和 C++ 程 序 员 很 可 能 认 为 $x 是 一 个 " 文 件 静 态 " 变 量 . 它 对 其 他 文 件 中 的 函 数 是 私 有的 , 但 是 在 上 例 中 在 my 后 面 定 义 的 函 数 可 以 透 视 到 这 个 变 量 . 那 些 由 C 程 序 员 转 变 而来 的 <strong>Perl</strong> 程 序 员 在 <strong>Perl</strong> 中 找 不 到 他 们 熟 悉 的 文 件 或 函 数 的 " 静 态 变 量 ".<strong>Perl</strong> 程 序 员 避免 使 用 "static" 这 个 词 . 因 为 静 态 系 统 过 时 而 且 乏 味 , 并 且 因 为 在 历 史 使 用 中 这 个 词 被 搞得 一 团 糟 .虽 然 <strong>Perl</strong> 语 法 中 没 有 包 括 "static" 这 个 词 , 但 是 <strong>Perl</strong> 程 序 员 同 样 能 够 创 建 函 数 的 私 有 变量 , 并 且 保 持 跨 函 数 访 问 .<strong>Perl</strong> 中 没 有 专 门 的 词 来 表 述 他 们 . 利 用 <strong>Perl</strong> 丰 富 的 作 用 范 围规 则 结 合 自 动 内 存 管 理 , 就 可 以 有 很 多 方 式 实 现 "static" 关 键 字 的 功 能 .词 法 变 量 并 不 会 只 是 因 为 退 出 了 它 们 的 作 用 范 围 后 就 被 自 动 内 存 垃 圾 收 集 回 收 , 它 们 要 等 到不 再 使 用 后 才 被 回 收 , 这 个 概 念 十 分 重 要 . 为 了 创 建 一 个 在 跨 函 数 调 用 中 不 被 重 置 的 私 有 变量 , 你 可 以 将 整 个 函 数 用 花 括 弧 括 起 来 , 并 将 my 定 义 和 函 数 定 义 放 入 该 函 数 块 中 . 你 甚至 可 以 放 入 多 个 函 数 定 义 , 这 样 该 私 有 变 量 就 可 以 被 这 些 函 数 共 享 访 问 .{my $counter = 0;sub next_counter { return ++$counter }sub prev_counter { return --$counter }}通 常 , 对 词 法 变 量 的 访 问 被 限 制 在 同 一 个 词 法 作 用 域 中 . 两 个 函 数 的 名 字 可 以 被 全 局 访 问( 在 同 一 个 包 内 ), 并 且 因 为 它 们 是 在 $counter 的 作 用 域 中 定 义 的 , 它 们 仍 然 可 以 访 问 该变 量 , 即 使 其 他 函 数 访 问 不 到 也 无 妨 .如 果 这 个 函 数 是 通 过 require 或 use 加 载 的 , 那 么 也 可 以 . 如 果 它 全 在 主 程 序 中 , 那 么你 就 要 确 保 使 任 何 运 行 时 的 my 赋 值 要 足 够 地 早 , 你 可 以 将 整 个 程 序 块 放 在 主 程 序 的 最 前边 , 也 可 以 使 用 BEGIN 或 INIT 程 序 块 来 保 证 它 在 你 的 程 序 之 前 运 行 :BEGIN {my @scale = ('A' .. 'G');my $note = -1;sub next_pitch { return $scale[ ($note += 1) %= @scale ] );}186

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

Saved successfully!

Ooh no, something went wrong!