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.

没 能 找 到 匹 配 , 则 再 按 同 样 的 顺 序 运 行 一 便 , 这 次 是 查 找 一 个 AUTOLOAD 子 过 程 。 如 果找 到 , 则 把 这 个 子 过 程 当 作 一 个 方 法 来 调 用 , 同 时 把 包 的 $AUTOLOAD 变 量 设 置 为 该 子过 程 的 全 名 ( 就 是 代 表 AUTOLOAD 调 用 的 那 个 子 过 程 。)当 自 动 装 载 方 法 的 时 候 , 你 得 小 心 一 些 。 首 先 , 如 果 AUTOLOAD 的 子 过 程 代 表 一 个 叫DESTROY 的 方 法 调 用 , 那 么 它 应 该 立 即 返 回 , 除 非 你 的 目 的 是 仿 真 DESTROY, 那 样 的话 对 <strong>Perl</strong> 有 特 殊 含 义 , 我 们 将 在 本 章 后 面 的 “ 实 例 析 构 器 ” 里 描 述 。sub AUTOLOAD {return if our $AUTOLOAD =~ /::DESTROY$/;...}第 二 , 如 果 该 类 提 供 一 个 AUTOLOAD 安 全 网 , 那 么 你 就 不 能 对 一 个 方 法 名 使 用UNIVERSAL::can 来 检 查 调 用 该 方 法 是 否 安 全 。 你 必 须 独 立 地 检 查 AUTOLOAD:if ($obj->can("methname") || $obj->can("AUTOLAOD")) {$obj->methname();}最 后 , 在 多 重 继 承 的 情 况 下 , 如 果 一 个 类 从 两 个 或 者 更 多 类 继 承 过 来 , 而 每 个 类 都 有 一 个AUTOLOAD, 那 么 只 有 最 左 边 的 会 被 触 发 , 因 为 <strong>Perl</strong> 在 找 到 第 一 个 AUTOLOAD 以 后就 停 下 来 了 。后 两 个 要 求 可 以 很 容 易 地 通 过 声 明 包 里 的 子 过 程 来 绕 开 , 该 包 的 AUTOLOAD 就 是 准 备 管理 这 些 方 法 的 。 你 可 以 用 独 立 的 声 明 实 现 这 些 :package Goblin;sub kick;sub bite;sub scratch;或 者 用 use subs 用 法 , 如 果 你 有 许 多 方 法 要 声 明 , 这 样 会 更 方 便 :package Goblin;use subs qw(kick bite scratch);307

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

Saved successfully!

Ooh no, something went wrong!