X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2Foverload.pm;h=0120882999a2f85523fc865c8f2068ed78cf6576;hb=326b5008ebd8d91bf6b00d96127d2d711c9f2132;hp=b189044846d55f756b1f91134392ad2058ebf1ea;hpb=bfce84ec9fb7d74c41a80b7823d3e3c5a1e43f7a;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/overload.pm b/lib/overload.pm index b189044..0120882 100644 --- a/lib/overload.pm +++ b/lib/overload.pm @@ -1,8 +1,6 @@ package overload; -our $VERSION = '1.03'; - -$overload::hint_bits = 0x20000; # HINT_LOCALIZE_HH +our $VERSION = '1.04'; sub nil {} @@ -149,7 +147,7 @@ sub constant { } else { $^H{$_[0]} = $_[1]; - $^H |= $constants{$_[0]} | $overload::hint_bits; + $^H |= $constants{$_[0]}; } shift, shift; } @@ -422,7 +420,7 @@ The dereference operators must be specified explicitly they will not be passed t =item * I - "nomethod", "fallback", "=", + "nomethod", "fallback", "=", "~~", see L>. @@ -542,6 +540,11 @@ C<"nomethod"> value, and if this is missing, raises an exception. B C<"fallback"> inheritance via @ISA is not carved in stone yet, see L<"Inheritance and overloading">. +=head2 Smart Match + +The key C<"~~"> allows you to override the smart matching used by +the switch construct. See L. + =head2 Copy Constructor The value for C<"="> is a reference to a function with three @@ -663,6 +666,23 @@ value is a scalar and not a reference. =back +=head1 Minimal set of overloaded operations + +Since some operations can be automatically generated from others, there is +a minimal set of operations that need to be overloaded in order to have +the complete set of overloaded operations at one's disposal. +Of course, the autogenerated operations may not do exactly what the user +expects. See L above. The minimal set is: + + + - * / % ** << >> x + <=> cmp + & | ^ ~ + atan2 cos sin exp log sqrt int + +Additionally, you need to define at least one of string, boolean or +numeric conversions because any one can be used to emulate the others. +The string conversion can also be used to emulate concatenation. + =head1 Losing overloading The restriction for the comparison operation is that even if, for example, @@ -778,9 +798,6 @@ From these methods they may be called as overload::constant integer => sub {Math::BigInt->new(shift)}; } -B Currently overloaded-ness of constants does not propagate -into C. - =head1 IMPLEMENTATION What follows is subject to change RSN.