質問: 演算子のオーバーロードを行うパッケージ「overload」の使い方を教えてください。 例えば、 2 + 3 のような加法演算子「+」をオーバーロードして減法演算子にし、 -1 と出力させるには、どのように書けばよいのでしょうか? 上記のperldocの日本語訳を読みましたが、理解するに至っていません。 どなたか、簡単にご説明頂けないでしょうか。ご教示よろしくお願い致します。
回答: 手元の「プログラミングPerl」 (O'reilly) を見ながら, っと. まず次のようなモジュール foo.pm を作ります: -------------------- ここから -------------------- package foo; use overload '+' => \&add_foo, q("") => \&stringify; sub import { overload::constant integer => \&make_foo, float => \&make_foo; } sub unimport { overload::remove_constant integer => \&make_foo, float => \&make_foo; } sub make_foo { bless { val => $_[1] }; } sub add_foo { my ($foo1, $foo2) = @_; bless { val => $foo1->{val} - $foo2->{val} }; } sub stringify { $_[0]{val}; } 1; -------------------- ここまで -------------------- これを使って次のような test.pl を作ると -------------------- ここから -------------------- use strict; use foo; print 1+2, "\n"; -------------------- ここまで -------------------- めでたく期待通りの結果.