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.

sub on { $state = 1}sub off { $state = 0}sub toggle { $state =!$state }}eval STRING 操 作 符 同 样 也 作 为 嵌 套 范 围 运 行 , 因 为 eval 里 的 代 码 可 以 看 到 其 调 用 者 的词 汇 ( 只 要 其 名 字 不 被 eval 自 己 范 围 里 的 相 同 声 明 隐 藏 )。 匿 名 子 过 程 也 可 以 在 它 们 的闭 合 范 围 内 访 问 任 意 词 汇 ; 如 果 是 这 样 , 那 么 这 些 匿 名 子 过 程 就 是 所 谓 的 闭 包 ( 注 : 一 个 记忆 用 词 , 表 示 在 “ 闭 合 范 围 ” 和 “ 闭 包 ” 之 间 的 普 通 元 素 。( 闭 包 的 真 实 定 义 源 自 一 个 数 学 概 念 ,该 概 念 考 虑 数 值 集 合 和 对 那 些 数 值 的 操 作 的 完 整 性 。)) 结 合 这 两 种 概 念 , 如 果 一 个 块 eval了 一 个 创 建 一 个 匿 名 子 过 程 的 字 串 , 该 子 过 程 就 成 为 可 以 同 时 访 问 eval 和 该 块 的 闭 包 ,甚 至 在 eval 和 该 块 退 出 后 也 是 如 此 。 参 阅 第 八 章 , 引 用 , 里 的 “ 闭 包 ” 节 。新 声 明 的 变 量 ( 或 者 是 值 -- 如 果 你 使 用 的 是 local) 在 声 明 语 句 之 后 才 可 见 。 因 此 你 可 以 用下 面 的 方 法 给 一 个 变 量 做 镜 像 :my $x = $x;这 句 话 把 新 的 内 部 $x 初 始 化 为 当 前 值 $x, 不 管 $x 的 当 前 含 义 是 全 局 还 是 词 汇 。( 如果 你 没 有 初 始 化 新 变 量 , 那 么 它 从 一 个 未 定 义 或 者 空 值 开 始 。)定 义 一 个 任 意 名 字 的 词 汇 变 量 隐 藏 了 任 何 以 前 定 义 的 同 名 词 汇 。 它 也 同 时 隐 藏 任 何 同 名 无 修饰 全 局 变 量 , 不 过 你 总 是 可 以 通 过 明 确 声 明 全 局 变 量 所 处 的 包 的 方 法 来 访 问 全 局 变 量 , 比 如 ,$PackageName::varname。4.7.3 词 法 范 围 全 局 声 明 :our有 一 个 访 问 全 局 变 量 的 更 好 的 方 法 就 是 our 声 明 , 尤 其 那 些 在 use strice 声 明 下 运 行 的程 序 和 模 块 。 这 个 声 明 也 是 词 法 范 围 内 的 , 因 为 它 的 应 用 范 围 只 扩 展 到 当 前 范 围 的 结 尾 。 但与 词 法 范 围 的 my 或 动 态 范 围 的 local 不 同 的 是 :our 并 不 隔 离 当 前 词 法 或 者 动 态 范 围 里的 任 何 东 西 。 相 反 , 它 在 当 前 环 境 里 提 供 一 个 访 问 全 局 变 量 的 途 径 , 它 把 所 有 同 名 词 汇 隐 藏起 来 ( 否 则 这 些 词 汇 会 为 你 隐 藏 全 局 变 量 )。 在 这 个 方 面 ,our 变 量 和 my 变 量 作 用 相 同 。如 果 你 把 our 声 明 放 在 任 何 花 括 弧 分 隔 的 块 的 外 面 , 它 的 范 围 就 延 续 到 当 前 编 译 单 元 的 结尾 。 通 常 , 人 们 只 是 把 它 放 在 一 个 子 过 程 定 义 的 顶 端 以 表 明 他 们 在 访 问 全 局 变 量 :sub check_warehouse {138

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

Saved successfully!

Ooh no, something went wrong!