NAME Attribute::Overload::Match - argument-dependent handlers for overloaded operators DESCRIPTION The module is a wrapper for overload, that provides a simple syntax for calling different operator handlers for different passed arguments. The idea is a curious ( but probably not a very practical ) mix of Attribute::Overload and Sub::PatMat . SYNOPSIS use Attribute::Overload::Match; Suppose we declare a class that overloads operations on integers: sub new($) { my $x = $_[0]; bless \$x, __PACKAGE__ } sub val($) { ${$_[0]} } sub eq : op(==) { val(shift) == shift } sub subtract : op(-) { new val(shift) - shift } sub mul : op(*) { new val(shift) * shift } sub add : op(+) { new val(shift) + shift } sub qq : op("") { val(shift) } sub le : op(<) { val(shift) < shift } ... then we can change meaning of some operators with a touch of functional style: no warnings 'redefine'; sub fac : op(!,1) { new 1 } sub fac : op(!) { !($_[0] - 1) * $_[0] } or sub fib : op(~,<2) { new 1 } sub fib : op(~) { ~( $_[0] - 1) + ~($_[0] - 2) } (if you don't like "no warnings 'redefine'", just use different sub names for "fac" etc) thus my $x = !new(10); print "$x\n"; 3628800 and my $x = ~new(10); print "$x\n"; 89 SYNTAX The only syntax available here is syntax that is passed to "op" attributes, which is in general "sub mysub : op(OPERATOR,CODE[,CODE[,CODE ...]])", where "OPERATOR" belongs to strings defined in overload ( such as "+", "[]", "" etc), and "CODE" strings are perl code, matching a parameter. However, for the sake of readability, "CODE" can be also one of the following signatures: Empty string Parameter is never checked String starting with a digit Pataremeter must be defined and be equal ("==") to the value if the string Single-quoted string Parameter must be defined and be equal ("eq") to the value if the string Non-quoted string beginning with a capital letter The string defined as a class name. Parameter must be defined and be an instance of the class (or its descendant). "//" Parameter must be defined. One of "<,>,lt,gt,eq,==,ne,!=" followed by an expression Parameter must be defined and return true when compared with the expression using given comparison operator Anything else Anything else is passed directly to "eval" and is treated in a boolean context thereafter. ACKNOWLEDGEMENTS Thanks to Anton Berezin for ideas on Sub::PatMat . Thanks to H. Merijn Brandt for "//". SEE ALSO Attribute::Overload, Sub::PatMat, overload. COPYRIGHT This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. AUTHOR Dmitry Karasik