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 "Running versino ", Thread->VERSION, " of Thread.\n";你 可 以 提 供 自 己 的 VERSION 方 法 覆 盖 掉 UNIVERSAL 的 。 不 过 那 样 会 令 任 何 从 你 的 类衍 生 的 类 也 使 用 哪 个 覆 盖 类 。 如 果 你 不 想 发 生 这 样 的 事 情 , 你 应 该 把 你 的 方 法 设 计 成 把 其他 类 的 版 本 请 求 返 回 给 UNIVERSAL。在 UNIVERSAL 里 的 方 法 是 内 建 的 <strong>Perl</strong> 子 过 程 , 如 果 你 使 用 全 称 并 且 传 递 两 个 参 数 , 你就 可 以 调 用 它 们 , 比 如 UNIVERSAL::isa($formobj, "HASH")。( 但 是 我 们 不 推 荐 这 么用 , 因 为 通 常 而 言 can 包 含 你 真 正 在 找 的 答 案 。)你 可 以 自 由 地 给 UNIVERSAL 增 加 你 自 己 的 方 法 。( 当 然 , 你 必 须 小 心 ; 否 则 你 可 能 真 的把 事 情 搞 砸 , 比 如 有 些 东 西 是 假 设 找 不 到 你 正 在 定 义 的 方 法 名 的 , 这 样 它 们 就 可 以 从 其 他 地方 自 动 装 载 进 来 。) 下 面 我 们 创 建 了 一 个 copy 方 法 , 所 有 类 的 对 象 都 可 以 使 用 —— 只 要这 些 对 象 没 有 定 义 自 己 的 。( 我 们 忘 了 给 调 用 一 个 对 象 做 解 析 。)use Data::Dumper;use Carp;sub UNIVERSAL::copy {my $self = shift;if (ref $self) {return eval Dumper($self);# 没 有 CORE 引 用}else{confess "UNIVERSAL::copy can't copy class $self";}}如 果 该 对 象 包 含 任 意 到 子 过 程 的 引 用 , 这 个 Data::Dumper 的 策 略 就 无 法 运 转 , 因 为 它们 不 能 正 确 地 复 现 。 即 使 能 够 拿 到 源 程 序 , 词 法 绑 定 仍 然 会 丢 失 。12.5.4 方 法 自 动 装 载通 常 , 当 你 调 用 某 个 包 里 面 未 定 义 子 过 程 , 而 该 包 定 义 了 一 个 AUTOLOAD 子 过 程 , 则 调用 该 AUTOLOAD 子 过 程 并 且 抛 出 一 个 例 外 ( 参 阅 第 十 章 ,“ 自 动 装 载 Autoloading”)。方 法 的 运 做 略 有 不 同 。 如 果 普 通 的 方 法 查 找 ( 通 过 类 , 它 的 祖 先 以 及 最 终 的 UNIVERSAL)306

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

Saved successfully!

Ooh no, something went wrong!