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> 程 序 分 裂 为 四 个 独 立 的 阶 段 , 每 个 阶 段 都 有 自 己 的 独 立 的 子 阶 段 。 第 一个 和 最 后 一 个 是 最 让 人 感 兴 趣 的 两 个 , 而 中 间 的 两 个 是 可 选 的 。 这 些 阶 段 在 图 18-1 里 描绘 。1. 编 译 阶 段在 第 一 阶 段 : 编 译 阶 段 里 ,<strong>Perl</strong> 编 译 器 把 你 的 程 序 转 换 成 一 个 叫 分 析 树 的 数 据 结 构 。除 了 使 用 标 准 的 分 析 技 术 以 外 ,<strong>Perl</strong> 还 使 用 了 一 种 更 强 大 的 分 析 技 术 : 它 使 用 BEGIN块 引 导 编 译 进 行 得 更 深 入 。BEGIN 块 一 完 成 分 析 就 转 交 给 解 释 器 运 行 , 结 果 是 它 们 以FIFO ( 先 进 先 出 ) 顺 序 运 行 。 这 样 处 理 的 包 括 use 和 no 声 明 ; 它 们 实 际 上 是 伪 装的 BEGIN 块 。 任 何 CHECK,INIT, 和 END 块 都 由 编 译 器 安 排 推 迟 的 执 行 。词 法 声 明 也 做 上 记 号 , 但 是 还 不 执 行 给 它 们 的 赋 值 。 所 有 eval BLOCKS,s///e 构 造 ,和 非 代 换 的 规 则 表 达 式 都 在 这 里 编 译 , 并 且 常 量 表 达 式 都 预 先 计 算 。 现 在 编 译 器 完 成 工作 , 除 非 稍 后 它 又 被 再 次 调 用 进 行 服 务 。 在 这 个 阶 段 的 结 尾 , 再 次 调 用 解 释 器 , 以 LIFO顺 序 ( 后 进 先 出 ) 执 行 任 何 安 排 好 了 的 CHECK 块 。 是 否 有 CHECK 块 出 现 决 定 了 我们 下 一 步 是 进 入 第 二 阶 段 还 是 直 接 进 入 第 四 阶 段 。2. 代 码 生 成 阶 段 ( 可 选 )CHECK 块 是 由 代 码 生 成 器 装 配 的 , 因 此 这 个 阶 段 是 在 你 明 确 地 使 用 一 个 代 码 生 成 器( 稍 后 在 “ 代 码 生 成 器 ” 里 描 述 ) 的 时 候 发 生 的 。 这 时 候 把 编 译 完 成 的 ( 但 还 没 运 行 的 )程 序 转 换 成 C 源 程 序 或 者 串 行 的 <strong>Perl</strong> 字 节 码 —— 一 个 代 表 内 部 <strong>Perl</strong> 指 令 的 数 值 序列 。 如 果 你 选 择 生 成 C 源 程 序 , 它 最 后 可 以 生 成 一 个 称 做 可 执 行 影 象 的 本 机 机 器 语 言 。( 注 : 你 最 初 的 脚 本 也 是 一 个 可 执 行 文 件 , 但 它 不 是 机 器 语 言 , 因 此 我 们 不 把 它 称 做影 象 。 之 所 以 称 其 为 影 象 文 件 是 因 为 它 是 一 个 你 的 CPU 用 于 直 接 执 行 的 机 器 编 码 的 逐字 拷 贝 。)这 时 候 , 你 的 程 序 暂 时 休 眠 。 如 果 你 制 作 了 一 个 可 执 行 影 象 , 那 么 你 可 以 直 接 进 入 阶 段4; 否 则 , 你 需 要 在 阶 段 三 里 重 新 组 成 冻 干 的 字 节 码 。3. 分 析 树 重 构 阶 段 ( 可 选 )要 复 活 你 的 程 序 , 它 的 分 析 树 必 须 重 新 构 造 。 这 个 阶 段 只 有 在 发 生 了 代 码 生 成 并 且 你 选择 生 成 字 节 码 的 情 况 下 存 在 。<strong>Perl</strong> 必 须 首 先 从 字 节 码 序 列 中 重 新 构 造 它 的 分 析 树 , 然后 才 能 运 行 程 序 。<strong>Perl</strong> 并 不 直 接 从 字 节 码 运 行 程 序 , 因 为 那 样 会 比 较 慢 。473

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

Saved successfully!

Ooh no, something went wrong!