X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2Foverload.pm;h=e506a7c2d35787570e97255983edc61da8c4aecb;hb=7cb0cfe6b05b22a9c89198b7133aee5507599e8c;hp=da114c505e0d87e5ccbfb62f5ad4e39c6e46eea6;hpb=e22107918e7098e33f84d797aca37d62d1b3e0a6;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/overload.pm b/lib/overload.pm index da114c5..e506a7c 100644 --- a/lib/overload.pm +++ b/lib/overload.pm @@ -1,6 +1,6 @@ package overload; -our $VERSION = '1.07'; +our $VERSION = '1.09'; sub nil {} @@ -9,6 +9,7 @@ sub OVERLOAD { my %arg = @_; my ($sub, $fb); $ {$package . "::OVERLOAD"}{dummy}++; # Register with magic by touching. + $fb = ${$package . "::()"}; # preserve old fallback value RT#68196 *{$package . "::()"} = \&nil; # Make it findable via fetchmethod. for (keys %arg) { if ($_ eq 'fallback') { @@ -134,10 +135,11 @@ sub mycan { # Real can would leave stubs. unary => "neg ! ~", mutators => '++ --', func => "atan2 cos sin exp abs log sqrt int", - conversion => 'bool "" 0+', + conversion => 'bool "" 0+ qr', iterators => '<>', filetest => "-X", dereferencing => '${} @{} %{} &{} *{}', + matching => '~~', special => 'nomethod fallback ='); use warnings::register; @@ -398,15 +400,20 @@ floating-point-like types one should follow the same semantic. If C is unavailable, it can be autogenerated using the overloading of C<0+>. -=item * I +=item * I - 'bool', '""', '0+', + 'bool', '""', '0+', 'qr' -If one or two of these operations are not overloaded, the remaining ones can -be used instead. C is used in the flow control operators -(like C) and for the ternary C operation. These functions can -return any arbitrary Perl value. If the corresponding operation for this value -is overloaded too, that operation will be called again with this value. +If one or two of these operations are not overloaded, the remaining ones +can be used instead. C is used in the flow control operators +(like C) and for the ternary C operation; C is used for +the RHS of C<=~> and when an object is interpolated into a regexp. + +C, C<"">, and C<0+> can return any arbitrary Perl value. If the +corresponding operation for this value is overloaded too, that operation +will be called again with this value. C must return a compiled +regexp, or a ref to a compiled regexp (such as C returns), and any +further overloading on the return value will be ignored. As a special case if the overload returns the object itself then it will be used directly. An overloaded conversion returning the object is @@ -448,6 +455,37 @@ treated as a filename. This overload was introduced in perl 5.12. +=item * I + +The key C<"~~"> allows you to override the smart matching logic used by +the C<~~> operator and the switch construct (C/C). See +L and L. + +Unusually, overloading of the smart match operator does not automatically +take precedence over normal smart match behaviour. In particular, in the +following code: + + package Foo; + use overload '~~' => 'match'; + + my $obj = Foo->new(); + $obj ~~ [ 1,2,3 ]; + +the smart match does I invoke the method call like this: + + $obj->match([1,2,3],0); + +rather, the smart match distributive rule takes precedence, so $obj is +smart matched against each array element in turn until a match is found, +so you may see between one and three of these calls instead: + + $obj->match(1,0); + $obj->match(2,0); + $obj->match(3,0); + +Consult the match table in L for +details of when overloading is invoked. + =item * I '${}', '@{}', '%{}', '&{}', '*{}'. @@ -464,7 +502,7 @@ The dereference operators must be specified explicitly they will not be passed t =item * I - "nomethod", "fallback", "=", "~~", + "nomethod", "fallback", "=". see L>. @@ -485,10 +523,11 @@ A computer-readable form of the above table is available in the hash unary => 'neg ! ~', mutators => '++ --', func => 'atan2 cos sin exp abs log sqrt', - conversion => 'bool "" 0+', + conversion => 'bool "" 0+ qr', iterators => '<>', filetest => '-X', dereferencing => '${} @{} %{} &{} *{}', + matching => '~~', special => 'nomethod fallback =' =head2 Inheritance and overloading @@ -585,11 +624,6 @@ 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 @@ -664,8 +698,8 @@ is not defined. =item I -String, numeric, and boolean conversion are calculated in terms of one -another if not all of them are defined. +String, numeric, boolean and regexp conversion are calculated in terms +of one another if not all of them are defined. =item I