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.

}print blarg(20);# 打 印 :I see main::blarg(20)你 的 AUTOLOAD 子 过 程 可 以 用 eval 或 者 require 为 该 未 定 义 的 子 过 程 装 载 一 个 定义 , 或 者 是 用 我 们 前 面 讨 论 过 的 类 型 团 赋 值 的 技 巧 , 然 后 使 用 特 殊 形 式 的 goto 执 行 该 子过 程 , 这 种 goto 可 以 不 留 痕 迹 地 抹 去 AUTOLOAD 过 程 的 堆 栈 桢 。 下 面 我 们 通 过 给 类 型团 赋 予 一 个 闭 合 来 定 义 该 子 过 程 :sub AUTOLOAD {my $name = our $AUTOLOAD;*$AUTOLOAD = sub { print "I see $name(@_)\n"};goto &$AUTOLOAD; # 重 起 这 个 新 过 程 。}blarg(30);blarg(40);blarg(50);# 打 印 :I see main::blarg(30)# 打 印 :I see main::blarg(40)# 打 印 :I see main::blarg(50)标 准 的 AutoSplit ? 模 块 被 模 块 作 者 用 于 把 他 们 的 模 块 分 裂 成 独 立 的 文 件 ( 用 以 .al 结 尾的 文 件 ), 每 个 保 存 一 个 过 程 。 该 文 件 放 在 你 的 系 统 的 <strong>Perl</strong> 库 的 auto/ 目 录 里 , 在 那 之后 该 文 件 可 以 根 据 标 准 的 AutoLoader ? 模 块 的 需 要 自 动 装 载 。一 种 类 似 的 方 法 被 SelfLoader ? 模 块 使 用 , 只 不 过 它 从 该 文 件 自 己 的 DATA 区 自 动 装 载函 数 , 从 某 种 角 度 来 看 , 它 的 效 率 要 差 一 些 , 但 是 从 其 他 角 度 来 看 , 它 的 效 率 又 比 较 高 。 用AutoLoader ? 和 SelfLoader ? 自 动 装 载 <strong>Perl</strong> 函 数 是 对 通 过 DynaLoader ? 动 态 装 载 编译 好 的 C 函 数 的 模 拟 , 只 不 过 自 动 装 载 是 以 函 数 调 用 的 粒 度 进 行 实 现 的 , 而 动 态 装 载 是 以整 个 模 块 的 粒 度 进 行 装 载 的 , 并 且 通 常 会 一 次 链 接 进 入 若 干 个 C 或 C++ 函 数 。( 请 注 意许 多 <strong>Perl</strong> 程 序 员 不 用 AutoSplit ? ,AutoLoader,SelfLoader, 或 者 DynaLoader ? 模块 过 得 也 很 好 。 你 只 需 要 知 道 它 们 的 存 在 , 以 防 哪 天 你 不 用 它 还 真 解 决 不 了 问 题 。)我 们 可 以 在 把 AUTOLOAD 过 程 当 作 其 他 接 口 的 封 装 器 中 获 取 许 多 乐 趣 。 比 如 , 让 我 们 假设 任 何 没 有 定 义 的 函 数 应 该 就 是 哪 它 的 参 数 调 用 system。 你 要 做 的 就 是 :274

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

Saved successfully!

Ooh no, something went wrong!