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.

与 <strong>Perl</strong> 的 编 译 器 相 比 ,<strong>Perl</strong> 的 解 释 器 是 非 常 直 接 的 , 直 接 得 几 乎 让 人 厌 倦 的 程 序 。 它 所做 的 一 切 就 是 走 过 那 些 编 译 出 来 的 操 作 码 , 每 次 一 个 , 然 后 把 它 们 发 配 给 <strong>Perl</strong> 运 行 时 环 境 ,也 就 是 <strong>Perl</strong> 虚 拟 机 。 它 只 不 过 是 一 小 堆 C 代 码 , 对 吧 ?实 际 上 , 它 一 点 也 不 乏 味 。<strong>Perl</strong> 的 虚 拟 机 替 你 跟 踪 一 堆 动 态 环 境 , 这 样 你 就 不 用 跟 踪 了 。<strong>Perl</strong> 维 护 不 少 堆 栈 , 你 用 不 着 理 解 它 们 , 但 是 我 们 会 在 这 里 列 出 来 好 加 深 你 的 印 象 :• 操 作 数 堆 栈 (operand stack)这 个 堆 栈 我 们 已 经 讲 过 了 。• 保 存 堆 栈 (save stack)在 这 里 存 放 等 待 恢 复 的 局 部 数 值 。 许 多 内 部 过 程 也 有 许 多 你 不 知 道 的 局 部 值 。• 范 围 堆 栈 (scope stack)轻 量 的 动 态 环 境 , 它 控 制 何 时 保 存 堆 栈 应 该 ” 弹 出 “。• 环 境 堆 栈 (context stack)重 量 级 的 动 态 环 境 ; 是 谁 调 用 了 谁 最 后 把 你 放 到 了 你 现 在 所 处 的 位 置 。caller 函数 遍 历 这 个 堆 栈 。 循 环 控 制 函 数 扫 描 这 个 堆 栈 以 找 出 需 要 控 制 哪 个 循 环 。 如 果 你 从 环 境堆 栈 剥 出 , 那 么 范 围 堆 栈 也 相 应 剥 出 , 这 样 就 从 你 的 保 存 堆 栈 里 恢 复 所 有 局 部 变 量 , 甚至 你 用 一 些 极 端 的 方 法 , 比 如 抛 出 例 外 或 者 longjmp(3) 出 去 等 也 是 如 此 。• 环 境 跳 转 堆 栈 (jumpenv stack)longjmp(3) 环 境 的 堆 栈 , 它 允 许 你 抛 出 错 误 或 者 迅 速 退 出 。• 返 回 堆 栈 (return stack)我 们 进 入 这 个 子 过 程 时 的 来 路 。• 标 记 堆 栈 (mark stack)在 操 作 数 堆 栈 里 的 列 出 的 当 前 的 杂 参 数 的 起 点 。480

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

Saved successfully!

Ooh no, something went wrong!