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.

2.3 范 围 问 题因 为 每 次 调 用 都 有 自 己 的 参 数 数 组 , 因 此 子 过 程 可 以 递 归 调 用 , 甚 至 可 以 调 用 它 自 己 . 如 果使 用 & 的 形 式 调 用 子 过 程 , 那 么 参 数 列 表 是 可 选 的 . 如 果 使 用 了 & 并 且 省 略 了 参 数 列 表 ,那 么 有 一 些 特 殊 的 规 则 : 调 用 过 程 中 的 @_ 数 组 将 做 为 被 调 用 子 过 程 的 参 数 . 新 用 户 可 能不 想 使 用 这 种 有 效 的 机 制 .&foo(1,2,3)foo(1,2,3)# 传 递 三 个 参 数# 和 上 面 一 样foo();&foo();# 传 递 一 个 空 列 表# 和 上 面 一 样&foo; # foo() 获 取 当 前 的 参 数 , 和 foo(@_) 一 样 , 但 更 快 !foo;# 如 果 预 定 义 了 子 过 程 foo, 那 么 和 foo() 一 样 , 否 则# 就 是 光 字 "foo"使 用 & 形 式 调 用 子 过 程 不 仅 可 以 省 略 掉 参 数 列 表 , 同 时 对 你 提 供 的 参 数 也 不 进 行 任 何 原 型检 查 . 这 种 做 法 一 部 分 是 因 为 历 史 原 因 形 成 , 另 一 部 分 原 因 是 为 了 在 用 户 清 楚 自 己 在 干 什 么的 情 况 下 提 供 一 个 方 便 的 办 法 . 你 可 以 参 看 本 章 后 面 的 " 原 型 " 小 节 .在 函 数 中 访 问 一 个 并 没 有 定 义 成 该 函 数 私 有 的 变 量 不 一 定 是 全 局 变 量 ; 它 们 遵 循 第 二 章 "集 腋 成 裘 " 中 " 名 字 " 一 节 中 提 到 的 块 作 用 范 围 规 则 , 这 意 味 着 他 们 首 先 在 词 法 作 用 范 围 里 面决 定 该 变 量 , 然 后 才 扩 展 到 单 个 包 作 用 范 围 . 从 子 过 程 的 角 度 看 来 , 任 何 在 一 个 闭 合 的 词 法作 用 域 中 的 my 变 量 仍 然 优 先 使 用 .例 如 , 下 面 例 子 中 的 bumpx 函 数 使 用 了 文 件 作 用 范 围 中 的 $x 变 量 , 这 是 因 为 my 变量 被 定 义 的 作 用 范 围 --- 也 就 是 文 件 本 身 --- 并 没 有 在 定 义 子 过 程 之 前 结 束 .# 文 件 顶 部my $x = 10;sub bumpx { $x++ }# 声 明 和 初 始 化 变 量# 函 数 可 以 看 到 外 层 词 法 变 量185

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

Saved successfully!

Ooh no, something went wrong!