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.

制 你 重 载 neg。( 当 然 , 如 果 你 已 经 独 裁 地 定 义 了 双 目 负 号 用 来 把 第 二 个 参 数 和 第 一 个 参数 分 开 , 那 么 单 目 操 作 符 会 是 一 个 很 好 的 抛 出 被 零 除 例 外 的 好 方 法 。)由 . 操 作 符 进 行 的 连 接 可 以 通 过 字 串 化 句 柄 ( 见 上 面 的 "" ) 自 动 生 成 。逻 辑 操 作 符 :!如 果 没 有 声 明 用 于 ! 的 句 柄 , 那 么 它 可 以 用 bool,"", 或 者 0+ 句 柄 自 动 生 成 。 如 果 你重 载 了 ! 操 作 符 , 那 么 当 表 现 你 的 请 求 的 时 候 , 同 样 还 会 触 发 not 操 作 符 。( 还 记 得 我们 的 小 秘 密 吗 ?) 你 可 能 觉 得 奇 怪 : 其 他 逻 辑 操 作 符 哪 里 去 了 ? 但 是 大 多 数 逻 辑 操 作 符 不能 重 载 , 因 为 它 们 是 短 路 的 。 他 们 实 际 上 是 控 制 流 操 作 符 , 这 样 它 们 就 可 以 推 迟 对 它 们 的一 些 参 数 的 计 算 。 那 也 是 ?: 操 作 符 不 能 重 载 的 原 因 。位 运 算 操 作 符 :&,|,~,^, ~ 操 作 符 是 一 个 单 目 操 作 符 ; 所 有 其 他 的 都 是 双目 。 下 面 是 我 们 如 何 重 载 >>, 使 之 能 做 类 似 chop 的 工 作 :package ShiftString ? ;use overload '>>' => \&right_shift, '""' => sub { ${ $_[0] } };sub new { my $class = shift; my $value = shift; return bless \$value =>$class; }sub right_shift { my ($x, $y) = @_; my $value = $$x; substr($value, -$y) = "";return bless \$value => ref($x); }$camel = ShiftString ? ->new("Camel"); $ram = $camel >>2; print $ram; #Cam赋 值 操 作 符 :+=,-=,*=,/=,%=,**=,x=,.=,=,++,-- 这 些赋 值 操 作 符 可 以 改 变 它 们 的 参 数 的 值 或 者 就 那 样 把 它 的 参 数 放 着 。 结 果 是 只 有 新 值 和 旧 值不 同 时 才 把 结 果 赋 值 给 左 手 边 的 操 作 数 。 这 样 就 允 许 同 一 个 句 柄 同 时 用 于 重 载 += 和 +。尽 管 这 么 做 是 可 以 的 , 不 过 我 们 并 不 建 议 你 这 么 做 , 因 为 根 据 我 们 稍 后 将 在 “ 当 缺 失 重 载 句柄 的 时 候 (nomethod 和 fallback)” 里 描 述 的 语 义 ,<strong>Perl</strong> 将 为 + 激 活 该 句 柄 , 同 时 假设 += 并 没 有 直 接 重 载 。连 接 (.=) 可 以 用 字 串 化 后 面 跟 着 普 通 的 字 串 连 接 自 动 生 成 。++ 和 -- 操 作 符 可 以 从 +和 -( 或 者 += 和 -=) 自 动 生 成 。实 现 ++ 和 -- 的 句 柄 可 能 会 变 更 ( 更 改 ) 他 们 的 参 数 。 如 果 你 希 望 自 增 也 能 对 字 母 有 效 ,你 可 以 用 类 似 下 面 的 句 柄 实 现 :336

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

Saved successfully!

Ooh no, something went wrong!