13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

if ($invocant->can("copy")) {print "Our invocant can copy.\n";}我 们 可 以 用 这 个 方 法 实 现 条 件 调 用 —— 只 有 方 法 存 在 才 调 用 :$obj->snarl if $obj->can("snarl");在 多 重 继 承 情 况 下 , 这 个 方 法 允 许 调 用 所 有 覆 盖 掉 的 基 类 的 方 法 , 而 不 仅 仅 是 最 左 边 的 那个 :sub snarl {my $self = shift;print "Snarling: @_\n";my %seen;for my $parend (@ISA) {if (my $code = $parent->can("snarl")) {$self->$code(@_) unless $seen{$code}++;}}}我 们 用 %seen 散 列 跟 踪 那 些 我 们 已 经 调 用 的 子 过 程 , 这 样 我 们 才 能 避 免 多 次 调 用 同 一 个子 过 程 。 这 种 情 况 在 多 个 父 类 共 享 一 个 共 同 的 祖 先 的 时 候 可 能 发 生 。会 触 发 一 个 AUTOLOAD( 在 下 一 节 描 述 ) 的 方 法 将 不 会 被 准 确 地 汇 报 , 除 非 该 包 已 经 声明 ( 但 没 有 定 义 ) 它 需 要 自 动 装 载 的 子 过 程 了 。INVOCANT-VERSION(NEED)VERSION 方 法 返 回 INVOCANT 的 类 的 版 本 号 , 就 是 存 贮 在 包 的 $VERSION 变 量 里 的那 只 。 如 果 提 供 了 NEED 参 数 , 它 表 示 当 前 版 本 至 少 不 能 小 于 NEED, 而 如 果 真 的 小 于就 会 抛 出 一 个 例 外 。 这 是 use 用 以 检 查 一 个 模 块 是 否 足 够 新 所 调 用 的 方 法 。use Thread 1.0;# 调 用 Thread->VERSION(1.0)305

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

Saved successfully!

Ooh no, something went wrong!