1package overload; 2 3our $VERSION = '1.18'; 4 5%ops = ( 6 with_assign => "+ - * / % ** << >> x .", 7 assign => "+= -= *= /= %= **= <<= >>= x= .=", 8 num_comparison => "< <= > >= == !=", 9 '3way_comparison' => "<=> cmp", 10 str_comparison => "lt le gt ge eq ne", 11 binary => '& &= | |= ^ ^=', 12 unary => "neg ! ~", 13 mutators => '++ --', 14 func => "atan2 cos sin exp abs log sqrt int", 15 conversion => 'bool "" 0+ qr', 16 iterators => '<>', 17 filetest => "-X", 18 dereferencing => '${} @{} %{} &{} *{}', 19 matching => '~~', 20 special => 'nomethod fallback =', 21); 22 23my %ops_seen; 24for $category (keys %ops) { 25 $ops_seen{$_}++ for (split /\s+/, $ops{$category}); 26} 27 28sub nil {} 29 30sub OVERLOAD { 31 $package = shift; 32 my %arg = @_; 33 my ($sub, $fb); 34 $ {$package . "::OVERLOAD"}{dummy}++; # Register with magic by touching. 35 $fb = ${$package . "::()"}; # preserve old fallback value RT#68196 36 *{$package . "::()"} = \&nil; # Make it findable via fetchmethod. 37 for (keys %arg) { 38 if ($_ eq 'fallback') { 39 $fb = $arg{$_}; 40 } else { 41 warnings::warnif("overload arg '$_' is invalid") 42 unless $ops_seen{$_}; 43 $sub = $arg{$_}; 44 if (not ref $sub and $sub !~ /::/) { 45 $ {$package . "::(" . $_} = $sub; 46 $sub = \&nil; 47 } 48 #print STDERR "Setting '$ {'package'}::\cO$_' to \\&'$sub'.\n"; 49 *{$package . "::(" . $_} = \&{ $sub }; 50 } 51 } 52 ${$package . "::()"} = $fb; # Make it findable too (fallback only). 53} 54 55sub import { 56 $package = (caller())[0]; 57 # *{$package . "::OVERLOAD"} = \&OVERLOAD; 58 shift; 59 $package->overload::OVERLOAD(@_); 60} 61 62sub unimport { 63 $package = (caller())[0]; 64 ${$package . "::OVERLOAD"}{dummy}++; # Upgrade the table 65 shift; 66 for (@_) { 67 if ($_ eq 'fallback') { 68 undef $ {$package . "::()"}; 69 } else { 70 delete $ {$package . "::"}{"(" . $_}; 71 } 72 } 73} 74 75sub Overloaded { 76 my $package = shift; 77 $package = ref $package if ref $package; 78 mycan ($package, '()'); 79} 80 81sub ov_method { 82 my $globref = shift; 83 return undef unless $globref; 84 my $sub = \&{*$globref}; 85 no overloading; 86 return $sub if !ref $sub or $sub != \&nil; 87 return shift->can($ {*$globref}); 88} 89 90sub OverloadedStringify { 91 my $package = shift; 92 $package = ref $package if ref $package; 93 #$package->can('(""') 94 ov_method mycan($package, '(""'), $package 95 or ov_method mycan($package, '(0+'), $package 96 or ov_method mycan($package, '(bool'), $package 97 or ov_method mycan($package, '(nomethod'), $package; 98} 99 100sub Method { 101 my $package = shift; 102 if(ref $package) { 103 local $@; 104 local $!; 105 require Scalar::Util; 106 $package = Scalar::Util::blessed($package); 107 return undef if !defined $package; 108 } 109 #my $meth = $package->can('(' . shift); 110 ov_method mycan($package, '(' . shift), $package; 111 #return $meth if $meth ne \&nil; 112 #return $ {*{$meth}}; 113} 114 115sub AddrRef { 116 no overloading; 117 "$_[0]"; 118} 119 120*StrVal = *AddrRef; 121 122sub mycan { # Real can would leave stubs. 123 my ($package, $meth) = @_; 124 125 local $@; 126 local $!; 127 require mro; 128 129 my $mro = mro::get_linear_isa($package); 130 foreach my $p (@$mro) { 131 my $fqmeth = $p . q{::} . $meth; 132 return \*{$fqmeth} if defined &{$fqmeth}; 133 } 134 135 return undef; 136} 137 138%constants = ( 139 'integer' => 0x1000, # HINT_NEW_INTEGER 140 'float' => 0x2000, # HINT_NEW_FLOAT 141 'binary' => 0x4000, # HINT_NEW_BINARY 142 'q' => 0x8000, # HINT_NEW_STRING 143 'qr' => 0x10000, # HINT_NEW_RE 144 ); 145 146use warnings::register; 147sub constant { 148 # Arguments: what, sub 149 while (@_) { 150 if (@_ == 1) { 151 warnings::warnif ("Odd number of arguments for overload::constant"); 152 last; 153 } 154 elsif (!exists $constants {$_ [0]}) { 155 warnings::warnif ("'$_[0]' is not an overloadable type"); 156 } 157 elsif (!ref $_ [1] || "$_[1]" !~ /(^|=)CODE\(0x[0-9a-f]+\)$/) { 158 # Can't use C<ref $_[1] eq "CODE"> above as code references can be 159 # blessed, and C<ref> would return the package the ref is blessed into. 160 if (warnings::enabled) { 161 $_ [1] = "undef" unless defined $_ [1]; 162 warnings::warn ("'$_[1]' is not a code reference"); 163 } 164 } 165 else { 166 $^H{$_[0]} = $_[1]; 167 $^H |= $constants{$_[0]}; 168 } 169 shift, shift; 170 } 171} 172 173sub remove_constant { 174 # Arguments: what, sub 175 while (@_) { 176 delete $^H{$_[0]}; 177 $^H &= ~ $constants{$_[0]}; 178 shift, shift; 179 } 180} 181 1821; 183 184__END__ 185 186=head1 NAME 187 188overload - Package for overloading Perl operations 189 190=head1 SYNOPSIS 191 192 package SomeThing; 193 194 use overload 195 '+' => \&myadd, 196 '-' => \&mysub; 197 # etc 198 ... 199 200 package main; 201 $a = SomeThing->new( 57 ); 202 $b = 5 + $a; 203 ... 204 if (overload::Overloaded $b) {...} 205 ... 206 $strval = overload::StrVal $b; 207 208=head1 DESCRIPTION 209 210This pragma allows overloading of Perl's operators for a class. 211To overload built-in functions, see L<perlsub/Overriding Built-in Functions> instead. 212 213=head2 Fundamentals 214 215=head3 Declaration 216 217Arguments of the C<use overload> directive are (key, value) pairs. 218For the full set of legal keys, see L<Overloadable Operations> below. 219 220Operator implementations (the values) can be subroutines, 221references to subroutines, or anonymous subroutines 222- in other words, anything legal inside a C<&{ ... }> call. 223Values specified as strings are interpreted as method names. 224Thus 225 226 package Number; 227 use overload 228 "-" => "minus", 229 "*=" => \&muas, 230 '""' => sub { ...; }; 231 232declares that subtraction is to be implemented by method C<minus()> 233in the class C<Number> (or one of its base classes), 234and that the function C<Number::muas()> is to be used for the 235assignment form of multiplication, C<*=>. 236It also defines an anonymous subroutine to implement stringification: 237this is called whenever an object blessed into the package C<Number> 238is used in a string context (this subroutine might, for example, 239return the number as a Roman numeral). 240 241=head3 Calling Conventions and Magic Autogeneration 242 243The following sample implementation of C<minus()> (which assumes 244that C<Number> objects are simply blessed references to scalars) 245illustrates the calling conventions: 246 247 package Number; 248 sub minus { 249 my ($self, $other, $swap) = @_; 250 my $result = $$self - $other; # * 251 $result = -$result if $swap; 252 ref $result ? $result : bless \$result; 253 } 254 # * may recurse once - see table below 255 256Three arguments are passed to all subroutines specified in the 257C<use overload> directive (with one exception - see L</nomethod>). 258The first of these is the operand providing the overloaded 259operator implementation - 260in this case, the object whose C<minus()> method is being called. 261 262The second argument is the other operand, or C<undef> in the 263case of a unary operator. 264 265The third argument is set to TRUE if (and only if) the two 266operands have been swapped. Perl may do this to ensure that the 267first argument (C<$self>) is an object implementing the overloaded 268operation, in line with general object calling conventions. 269For example, if C<$x> and C<$y> are C<Number>s: 270 271 operation | generates a call to 272 ============|====================== 273 $x - $y | minus($x, $y, '') 274 $x - 7 | minus($x, 7, '') 275 7 - $x | minus($x, 7, 1) 276 277Perl may also use C<minus()> to implement other operators which 278have not been specified in the C<use overload> directive, 279according to the rules for L<Magic Autogeneration> described later. 280For example, the C<use overload> above declared no subroutine 281for any of the operators C<-->, C<neg> (the overload key for 282unary minus), or C<-=>. Thus 283 284 operation | generates a call to 285 ============|====================== 286 -$x | minus($x, 0, 1) 287 $x-- | minus($x, 1, undef) 288 $x -= 3 | minus($x, 3, undef) 289 290Note the C<undef>s: 291where autogeneration results in the method for a standard 292operator which does not change either of its operands, such 293as C<->, being used to implement an operator which changes 294the operand ("mutators": here, C<--> and C<-=>), 295Perl passes undef as the third argument. 296This still evaluates as FALSE, consistent with the fact that 297the operands have not been swapped, but gives the subroutine 298a chance to alter its behaviour in these cases. 299 300In all the above examples, C<minus()> is required 301only to return the result of the subtraction: 302Perl takes care of the assignment to $x. 303In fact, such methods should I<not> modify their operands, 304even if C<undef> is passed as the third argument 305(see L<Overloadable Operations>). 306 307The same is not true of implementations of C<++> and C<-->: 308these are expected to modify their operand. 309An appropriate implementation of C<--> might look like 310 311 use overload '--' => "decr", 312 # ... 313 sub decr { --${$_[0]}; } 314 315=head3 Mathemagic, Mutators, and Copy Constructors 316 317The term 'mathemagic' describes the overloaded implementation 318of mathematical operators. 319Mathemagical operations raise an issue. 320Consider the code: 321 322 $a = $b; 323 --$a; 324 325If C<$a> and C<$b> are scalars then after these statements 326 327 $a == $b - 1 328 329An object, however, is a reference to blessed data, so if 330C<$a> and C<$b> are objects then the assignment C<$a = $b> 331copies only the reference, leaving C<$a> and C<$b> referring 332to the same object data. 333One might therefore expect the operation C<--$a> to decrement 334C<$b> as well as C<$a>. 335However, this would not be consistent with how we expect the 336mathematical operators to work. 337 338Perl resolves this dilemma by transparently calling a copy 339constructor before calling a method defined to implement 340a mutator (C<-->, C<+=>, and so on.). 341In the above example, when Perl reaches the decrement 342statement, it makes a copy of the object data in C<$a> and 343assigns to C<$a> a reference to the copied data. 344Only then does it call C<decr()>, which alters the copied 345data, leaving C<$b> unchanged. 346Thus the object metaphor is preserved as far as possible, 347while mathemagical operations still work according to the 348arithmetic metaphor. 349 350Note: the preceding paragraph describes what happens when 351Perl autogenerates the copy constructor for an object based 352on a scalar. 353For other cases, see L<Copy Constructor>. 354 355=head2 Overloadable Operations 356 357The complete list of keys that can be specified in the C<use overload> 358directive are given, separated by spaces, in the values of the 359hash C<%overload::ops>: 360 361 with_assign => '+ - * / % ** << >> x .', 362 assign => '+= -= *= /= %= **= <<= >>= x= .=', 363 num_comparison => '< <= > >= == !=', 364 '3way_comparison'=> '<=> cmp', 365 str_comparison => 'lt le gt ge eq ne', 366 binary => '& &= | |= ^ ^=', 367 unary => 'neg ! ~', 368 mutators => '++ --', 369 func => 'atan2 cos sin exp abs log sqrt int', 370 conversion => 'bool "" 0+ qr', 371 iterators => '<>', 372 filetest => '-X', 373 dereferencing => '${} @{} %{} &{} *{}', 374 matching => '~~', 375 special => 'nomethod fallback =' 376 377Most of the overloadable operators map one-to-one to these keys. 378Exceptions, including additional overloadable operations not 379apparent from this hash, are included in the notes which follow. 380 381A warning is issued if an attempt is made to register an operator not found 382above. 383 384=over 5 385 386=item * C<not> 387 388The operator C<not> is not a valid key for C<use overload>. 389However, if the operator C<!> is overloaded then the same 390implementation will be used for C<not> 391(since the two operators differ only in precedence). 392 393=item * C<neg> 394 395The key C<neg> is used for unary minus to disambiguate it from 396binary C<->. 397 398=item * C<++>, C<--> 399 400Assuming they are to behave analogously to Perl's C<++> and C<-->, 401overloaded implementations of these operators are required to 402mutate their operands. 403 404No distinction is made between prefix and postfix forms of the 405increment and decrement operators: these differ only in the 406point at which Perl calls the associated subroutine when 407evaluating an expression. 408 409=item * I<Assignments> 410 411 += -= *= /= %= **= <<= >>= x= .= 412 &= |= ^= 413 414Simple assignment is not overloadable (the C<'='> key is used 415for the L<Copy Constructor>). 416Perl does have a way to make assignments to an object do whatever 417you want, but this involves using tie(), not overload - 418see L<perlfunc/tie> and the L</COOKBOOK> examples below. 419 420The subroutine for the assignment variant of an operator is 421required only to return the result of the operation. 422It is permitted to change the value of its operand 423(this is safe because Perl calls the copy constructor first), 424but this is optional since Perl assigns the returned value to 425the left-hand operand anyway. 426 427An object that overloads an assignment operator does so only in 428respect of assignments to that object. 429In other words, Perl never calls the corresponding methods with 430the third argument (the "swap" argument) set to TRUE. 431For example, the operation 432 433 $a *= $b 434 435cannot lead to C<$b>'s implementation of C<*=> being called, 436even if C<$a> is a scalar. 437(It can, however, generate a call to C<$b>'s method for C<*>). 438 439=item * I<Non-mutators with a mutator variant> 440 441 + - * / % ** << >> x . 442 & | ^ 443 444As described L<above|"Calling Conventions and Magic Autogeneration">, 445Perl may call methods for operators like C<+> and C<&> in the course 446of implementing missing operations like C<++>, C<+=>, and C<&=>. 447While these methods may detect this usage by testing the definedness 448of the third argument, they should in all cases avoid changing their 449operands. 450This is because Perl does not call the copy constructor before 451invoking these methods. 452 453=item * C<int> 454 455Traditionally, the Perl function C<int> rounds to 0 456(see L<perlfunc/int>), and so for floating-point-like types one 457should follow the same semantic. 458 459=item * I<String, numeric, boolean, and regexp conversions> 460 461 "" 0+ bool 462 463These conversions are invoked according to context as necessary. 464For example, the subroutine for C<'""'> (stringify) may be used 465where the overloaded object is passed as an argument to C<print>, 466and that for C<'bool'> where it is tested in the condition of a flow 467control statement (like C<while>) or the ternary C<?:> operation. 468 469Of course, in contexts like, for example, C<$obj + 1>, Perl will 470invoke C<$obj>'s implementation of C<+> rather than (in this 471example) converting C<$obj> to a number using the numify method 472C<'0+'> (an exception to this is when no method has been provided 473for C<'+'> and L</fallback> is set to TRUE). 474 475The subroutines for C<'""'>, C<'0+'>, and C<'bool'> can return 476any arbitrary Perl value. 477If the corresponding operation for this value is overloaded too, 478the operation will be called again with this value. 479 480As a special case if the overload returns the object itself then it will 481be used directly. An overloaded conversion returning the object is 482probably a bug, because you're likely to get something that looks like 483C<YourPackage=HASH(0x8172b34)>. 484 485 qr 486 487The subroutine for C<'qr'> is used wherever the object is 488interpolated into or used as a regexp, including when it 489appears on the RHS of a C<=~> or C<!~> operator. 490 491C<qr> must return a compiled regexp, or a ref to a compiled regexp 492(such as C<qr//> returns), and any further overloading on the return 493value will be ignored. 494 495=item * I<Iteration> 496 497If C<E<lt>E<gt>> is overloaded then the same implementation is used 498for both the I<read-filehandle> syntax C<E<lt>$varE<gt>> and 499I<globbing> syntax C<E<lt>${var}E<gt>>. 500 501B<BUGS> Even in list context, the iterator is currently called only 502once and with scalar context. 503 504=item * I<File tests> 505 506The key C<'-X'> is used to specify a subroutine to handle all the 507filetest operators (C<-f>, C<-x>, and so on: see L<perlfunc/-X> for 508the full list); 509it is not possible to overload any filetest operator individually. 510To distinguish them, the letter following the '-' is passed as the 511second argument (that is, in the slot that for binary operators 512is used to pass the second operand). 513 514Calling an overloaded filetest operator does not affect the stat value 515associated with the special filehandle C<_>. It still refers to the 516result of the last C<stat>, C<lstat> or unoverloaded filetest. 517 518This overload was introduced in Perl 5.12. 519 520=item * I<Matching> 521 522The key C<"~~"> allows you to override the smart matching logic used by 523the C<~~> operator and the switch construct (C<given>/C<when>). See 524L<perlsyn/Switch Statements> and L<feature>. 525 526Unusually, the overloaded implementation of the smart match operator 527does not get full control of the smart match behaviour. 528In particular, in the following code: 529 530 package Foo; 531 use overload '~~' => 'match'; 532 533 my $obj = Foo->new(); 534 $obj ~~ [ 1,2,3 ]; 535 536the smart match does I<not> invoke the method call like this: 537 538 $obj->match([1,2,3],0); 539 540rather, the smart match distributive rule takes precedence, so $obj is 541smart matched against each array element in turn until a match is found, 542so you may see between one and three of these calls instead: 543 544 $obj->match(1,0); 545 $obj->match(2,0); 546 $obj->match(3,0); 547 548Consult the match table in L<perlop/"Smartmatch Operator"> for 549details of when overloading is invoked. 550 551=item * I<Dereferencing> 552 553 ${} @{} %{} &{} *{} 554 555If these operators are not explicitly overloaded then they 556work in the normal way, yielding the underlying scalar, 557array, or whatever stores the object data (or the appropriate 558error message if the dereference operator doesn't match it). 559Defining a catch-all C<'nomethod'> (see L<below|/nomethod>) 560makes no difference to this as the catch-all function will 561not be called to implement a missing dereference operator. 562 563If a dereference operator is overloaded then it must return a 564I<reference> of the appropriate type (for example, the 565subroutine for key C<'${}'> should return a reference to a 566scalar, not a scalar), or another object which overloads the 567operator: that is, the subroutine only determines what is 568dereferenced and the actual dereferencing is left to Perl. 569As a special case, if the subroutine returns the object itself 570then it will not be called again - avoiding infinite recursion. 571 572=item * I<Special> 573 574 nomethod fallback = 575 576See L<Special Keys for C<use overload>>. 577 578=back 579 580=head2 Magic Autogeneration 581 582If a method for an operation is not found then Perl tries to 583autogenerate a substitute implementation from the operations 584that have been defined. 585 586Note: the behaviour described in this section can be disabled 587by setting C<fallback> to FALSE (see L</fallback>). 588 589In the following tables, numbers indicate priority. 590For example, the table below states that, 591if no implementation for C<'!'> has been defined then Perl will 592implement it using C<'bool'> (that is, by inverting the value 593returned by the method for C<'bool'>); 594if boolean conversion is also unimplemented then Perl will 595use C<'0+'> or, failing that, C<'""'>. 596 597 operator | can be autogenerated from 598 | 599 | 0+ "" bool . x 600 =========|========================== 601 0+ | 1 2 602 "" | 1 2 603 bool | 1 2 604 int | 1 2 3 605 ! | 2 3 1 606 qr | 2 1 3 607 . | 2 1 3 608 x | 2 1 3 609 .= | 3 2 4 1 610 x= | 3 2 4 1 611 <> | 2 1 3 612 -X | 2 1 3 613 614Note: The iterator (C<'E<lt>E<gt>'>) and file test (C<'-X'>) 615operators work as normal: if the operand is not a blessed glob or 616IO reference then it is converted to a string (using the method 617for C<'""'>, C<'0+'>, or C<'bool'>) to be interpreted as a glob 618or filename. 619 620 operator | can be autogenerated from 621 | 622 | < <=> neg -= - 623 =========|========================== 624 neg | 1 625 -= | 1 626 -- | 1 2 627 abs | a1 a2 b1 b2 [*] 628 < | 1 629 <= | 1 630 > | 1 631 >= | 1 632 == | 1 633 != | 1 634 635 * one from [a1, a2] and one from [b1, b2] 636 637Just as numeric comparisons can be autogenerated from the method 638for C<< '<=>' >>, string comparisons can be autogenerated from 639that for C<'cmp'>: 640 641 operators | can be autogenerated from 642 ====================|=========================== 643 lt gt le ge eq ne | cmp 644 645Similarly, autogeneration for keys C<'+='> and C<'++'> is analogous 646to C<'-='> and C<'--'> above: 647 648 operator | can be autogenerated from 649 | 650 | += + 651 =========|========================== 652 += | 1 653 ++ | 1 2 654 655And other assignment variations are analogous to 656C<'+='> and C<'-='> (and similar to C<'.='> and C<'x='> above): 657 658 operator || *= /= %= **= <<= >>= &= ^= |= 659 -------------------||-------------------------------- 660 autogenerated from || * / % ** << >> & ^ | 661 662Note also that the copy constructor (key C<'='>) may be 663autogenerated, but only for objects based on scalars. 664See L<Copy Constructor>. 665 666=head3 Minimal Set of Overloaded Operations 667 668Since some operations can be automatically generated from others, there is 669a minimal set of operations that need to be overloaded in order to have 670the complete set of overloaded operations at one's disposal. 671Of course, the autogenerated operations may not do exactly what the user 672expects. The minimal set is: 673 674 + - * / % ** << >> x 675 <=> cmp 676 & | ^ ~ 677 atan2 cos sin exp log sqrt int 678 "" 0+ bool 679 ~~ 680 681Of the conversions, only one of string, boolean or numeric is 682needed because each can be generated from either of the other two. 683 684=head2 Special Keys for C<use overload> 685 686=head3 C<nomethod> 687 688The C<'nomethod'> key is used to specify a catch-all function to 689be called for any operator that is not individually overloaded. 690The specified function will be passed four parameters. 691The first three arguments coincide with those that would have been 692passed to the corresponding method if it had been defined. 693The fourth argument is the C<use overload> key for that missing 694method. 695 696For example, if C<$a> is an object blessed into a package declaring 697 698 use overload 'nomethod' => 'catch_all', # ... 699 700then the operation 701 702 3 + $a 703 704could (unless a method is specifically declared for the key 705C<'+'>) result in a call 706 707 catch_all($a, 3, 1, '+') 708 709See L<How Perl Chooses an Operator Implementation>. 710 711=head3 C<fallback> 712 713The value assigned to the key C<'fallback'> tells Perl how hard 714it should try to find an alternative way to implement a missing 715operator. 716 717=over 718 719=item * defined, but FALSE 720 721 use overload "fallback" => 0, # ... ; 722 723This disables L<Magic Autogeneration>. 724 725=item * C<undef> 726 727In the default case where no value is explicitly assigned to 728C<fallback>, magic autogeneration is enabled. 729 730=item * TRUE 731 732The same as for C<undef>, but if a missing operator cannot be 733autogenerated then, instead of issuing an error message, Perl 734is allowed to revert to what it would have done for that 735operator if there had been no C<use overload> directive. 736 737Note: in most cases, particularly the L<Copy Constructor>, 738this is unlikely to be appropriate behaviour. 739 740=back 741 742See L<How Perl Chooses an Operator Implementation>. 743 744=head3 Copy Constructor 745 746As mentioned L<above|"Mathemagic, Mutators, and Copy Constructors">, 747this operation is called when a mutator is applied to a reference 748that shares its object with some other reference. 749For example, if C<$b> is mathemagical, and C<'++'> is overloaded 750with C<'incr'>, and C<'='> is overloaded with C<'clone'>, then the 751code 752 753 $a = $b; 754 # ... (other code which does not modify $a or $b) ... 755 ++$b; 756 757would be executed in a manner equivalent to 758 759 $a = $b; 760 # ... 761 $b = $b->clone(undef, ""); 762 $b->incr(undef, ""); 763 764Note: 765 766=over 767 768=item * 769 770The subroutine for C<'='> does not overload the Perl assignment 771operator: it is used only to allow mutators to work as described 772here. (See L</Assignments> above.) 773 774=item * 775 776As for other operations, the subroutine implementing '=' is passed 777three arguments, though the last two are always C<undef> and C<''>. 778 779=item * 780 781The copy constructor is called only before a call to a function 782declared to implement a mutator, for example, if C<++$b;> in the 783code above is effected via a method declared for key C<'++'> 784(or 'nomethod', passed C<'++'> as the fourth argument) or, by 785autogeneration, C<'+='>. 786It is not called if the increment operation is effected by a call 787to the method for C<'+'> since, in the equivalent code, 788 789 $a = $b; 790 $b = $b + 1; 791 792the data referred to by C<$a> is unchanged by the assignment to 793C<$b> of a reference to new object data. 794 795=item * 796 797The copy constructor is not called if Perl determines that it is 798unnecessary because there is no other reference to the data being 799modified. 800 801=item * 802 803If C<'fallback'> is undefined or TRUE then a copy constructor 804can be autogenerated, but only for objects based on scalars. 805In other cases it needs to be defined explicitly. 806Where an object's data is stored as, for example, an array of 807scalars, the following might be appropriate: 808 809 use overload '=' => sub { bless [ @{$_[0]} ] }, # ... 810 811=item * 812 813If C<'fallback'> is TRUE and no copy constructor is defined then, 814for objects not based on scalars, Perl may silently fall back on 815simple assignment - that is, assignment of the object reference. 816In effect, this disables the copy constructor mechanism since 817no new copy of the object data is created. 818This is almost certainly not what you want. 819(It is, however, consistent: for example, Perl's fallback for the 820C<++> operator is to increment the reference itself.) 821 822=back 823 824=head2 How Perl Chooses an Operator Implementation 825 826Which is checked first, C<nomethod> or C<fallback>? 827If the two operands of an operator are of different types and 828both overload the operator, which implementation is used? 829The following are the precedence rules: 830 831=over 832 833=item 1. 834 835If the first operand has declared a subroutine to overload the 836operator then use that implementation. 837 838=item 2. 839 840Otherwise, if fallback is TRUE or undefined for the 841first operand then see if the 842L<rules for autogeneration|"Magic Autogeneration"> 843allows another of its operators to be used instead. 844 845=item 3. 846 847Unless the operator is an assignment (C<+=>, C<-=>, etc.), 848repeat step (1) in respect of the second operand. 849 850=item 4. 851 852Repeat Step (2) in respect of the second operand. 853 854=item 5. 855 856If the first operand has a "nomethod" method then use that. 857 858=item 6. 859 860If the second operand has a "nomethod" method then use that. 861 862=item 7. 863 864If C<fallback> is TRUE for both operands 865then perform the usual operation for the operator, 866treating the operands as numbers, strings, or booleans 867as appropriate for the operator (see note). 868 869=item 8. 870 871Nothing worked - die. 872 873=back 874 875Where there is only one operand (or only one operand with 876overloading) the checks in respect of the other operand above are 877skipped. 878 879There are exceptions to the above rules for dereference operations 880(which, if Step 1 fails, always fall back to the normal, built-in 881implementations - see Dereferencing), and for C<~~> (which has its 882own set of rules - see C<Matching> under L</Overloadable Operations> 883above). 884 885Note on Step 7: some operators have a different semantic depending 886on the type of their operands. 887As there is no way to instruct Perl to treat the operands as, e.g., 888numbers instead of strings, the result here may not be what you 889expect. 890See L<BUGS AND PITFALLS>. 891 892=head2 Losing Overloading 893 894The restriction for the comparison operation is that even if, for example, 895C<cmp> should return a blessed reference, the autogenerated C<lt> 896function will produce only a standard logical value based on the 897numerical value of the result of C<cmp>. In particular, a working 898numeric conversion is needed in this case (possibly expressed in terms of 899other conversions). 900 901Similarly, C<.=> and C<x=> operators lose their mathemagical properties 902if the string conversion substitution is applied. 903 904When you chop() a mathemagical object it is promoted to a string and its 905mathemagical properties are lost. The same can happen with other 906operations as well. 907 908=head2 Inheritance and Overloading 909 910Overloading respects inheritance via the @ISA hierarchy. 911Inheritance interacts with overloading in two ways. 912 913=over 914 915=item Method names in the C<use overload> directive 916 917If C<value> in 918 919 use overload key => value; 920 921is a string, it is interpreted as a method name - which may 922(in the usual way) be inherited from another class. 923 924=item Overloading of an operation is inherited by derived classes 925 926Any class derived from an overloaded class is also overloaded 927and inherits its operator implementations. 928If the same operator is overloaded in more than one ancestor 929then the implementation is determined by the usual inheritance 930rules. 931 932For example, if C<A> inherits from C<B> and C<C> (in that order), 933C<B> overloads C<+> with C<\&D::plus_sub>, and C<C> overloads 934C<+> by C<"plus_meth">, then the subroutine C<D::plus_sub> will 935be called to implement operation C<+> for an object in package C<A>. 936 937=back 938 939Note that since the value of the C<fallback> key is not a subroutine, 940its inheritance is not governed by the above rules. In the current 941implementation, the value of C<fallback> in the first overloaded 942ancestor is used, but this is accidental and subject to change. 943 944=head2 Run-time Overloading 945 946Since all C<use> directives are executed at compile-time, the only way to 947change overloading during run-time is to 948 949 eval 'use overload "+" => \&addmethod'; 950 951You can also use 952 953 eval 'no overload "+", "--", "<="'; 954 955though the use of these constructs during run-time is questionable. 956 957=head2 Public Functions 958 959Package C<overload.pm> provides the following public functions: 960 961=over 5 962 963=item overload::StrVal(arg) 964 965Gives the string value of C<arg> as in the 966absence of stringify overloading. If you 967are using this to get the address of a reference (useful for checking if two 968references point to the same thing) then you may be better off using 969C<Scalar::Util::refaddr()>, which is faster. 970 971=item overload::Overloaded(arg) 972 973Returns true if C<arg> is subject to overloading of some operations. 974 975=item overload::Method(obj,op) 976 977Returns C<undef> or a reference to the method that implements C<op>. 978 979=back 980 981=head2 Overloading Constants 982 983For some applications, the Perl parser mangles constants too much. 984It is possible to hook into this process via C<overload::constant()> 985and C<overload::remove_constant()> functions. 986 987These functions take a hash as an argument. The recognized keys of this hash 988are: 989 990=over 8 991 992=item integer 993 994to overload integer constants, 995 996=item float 997 998to overload floating point constants, 999 1000=item binary 1001 1002to overload octal and hexadecimal constants, 1003 1004=item q 1005 1006to overload C<q>-quoted strings, constant pieces of C<qq>- and C<qx>-quoted 1007strings and here-documents, 1008 1009=item qr 1010 1011to overload constant pieces of regular expressions. 1012 1013=back 1014 1015The corresponding values are references to functions which take three arguments: 1016the first one is the I<initial> string form of the constant, the second one 1017is how Perl interprets this constant, the third one is how the constant is used. 1018Note that the initial string form does not 1019contain string delimiters, and has backslashes in backslash-delimiter 1020combinations stripped (thus the value of delimiter is not relevant for 1021processing of this string). The return value of this function is how this 1022constant is going to be interpreted by Perl. The third argument is undefined 1023unless for overloaded C<q>- and C<qr>- constants, it is C<q> in single-quote 1024context (comes from strings, regular expressions, and single-quote HERE 1025documents), it is C<tr> for arguments of C<tr>/C<y> operators, 1026it is C<s> for right-hand side of C<s>-operator, and it is C<qq> otherwise. 1027 1028Since an expression C<"ab$cd,,"> is just a shortcut for C<'ab' . $cd . ',,'>, 1029it is expected that overloaded constant strings are equipped with reasonable 1030overloaded catenation operator, otherwise absurd results will result. 1031Similarly, negative numbers are considered as negations of positive constants. 1032 1033Note that it is probably meaningless to call the functions overload::constant() 1034and overload::remove_constant() from anywhere but import() and unimport() methods. 1035From these methods they may be called as 1036 1037 sub import { 1038 shift; 1039 return unless @_; 1040 die "unknown import: @_" unless @_ == 1 and $_[0] eq ':constant'; 1041 overload::constant integer => sub {Math::BigInt->new(shift)}; 1042 } 1043 1044=head1 IMPLEMENTATION 1045 1046What follows is subject to change RSN. 1047 1048The table of methods for all operations is cached in magic for the 1049symbol table hash for the package. The cache is invalidated during 1050processing of C<use overload>, C<no overload>, new function 1051definitions, and changes in @ISA. However, this invalidation remains 1052unprocessed until the next C<bless>ing into the package. Hence if you 1053want to change overloading structure dynamically, you'll need an 1054additional (fake) C<bless>ing to update the table. 1055 1056(Every SVish thing has a magic queue, and magic is an entry in that 1057queue. This is how a single variable may participate in multiple 1058forms of magic simultaneously. For instance, environment variables 1059regularly have two forms at once: their %ENV magic and their taint 1060magic. However, the magic which implements overloading is applied to 1061the stashes, which are rarely used directly, thus should not slow down 1062Perl.) 1063 1064If an object belongs to a package using overload, it carries a special 1065flag. Thus the only speed penalty during arithmetic operations without 1066overloading is the checking of this flag. 1067 1068In fact, if C<use overload> is not present, there is almost no overhead 1069for overloadable operations, so most programs should not suffer 1070measurable performance penalties. A considerable effort was made to 1071minimize the overhead when overload is used in some package, but the 1072arguments in question do not belong to packages using overload. When 1073in doubt, test your speed with C<use overload> and without it. So far 1074there have been no reports of substantial speed degradation if Perl is 1075compiled with optimization turned on. 1076 1077There is no size penalty for data if overload is not used. The only 1078size penalty if overload is used in some package is that I<all> the 1079packages acquire a magic during the next C<bless>ing into the 1080package. This magic is three-words-long for packages without 1081overloading, and carries the cache table if the package is overloaded. 1082 1083It is expected that arguments to methods that are not explicitly supposed 1084to be changed are constant (but this is not enforced). 1085 1086=head1 COOKBOOK 1087 1088Please add examples to what follows! 1089 1090=head2 Two-face Scalars 1091 1092Put this in F<two_face.pm> in your Perl library directory: 1093 1094 package two_face; # Scalars with separate string and 1095 # numeric values. 1096 sub new { my $p = shift; bless [@_], $p } 1097 use overload '""' => \&str, '0+' => \&num, fallback => 1; 1098 sub num {shift->[1]} 1099 sub str {shift->[0]} 1100 1101Use it as follows: 1102 1103 require two_face; 1104 my $seven = two_face->new("vii", 7); 1105 printf "seven=$seven, seven=%d, eight=%d\n", $seven, $seven+1; 1106 print "seven contains 'i'\n" if $seven =~ /i/; 1107 1108(The second line creates a scalar which has both a string value, and a 1109numeric value.) This prints: 1110 1111 seven=vii, seven=7, eight=8 1112 seven contains 'i' 1113 1114=head2 Two-face References 1115 1116Suppose you want to create an object which is accessible as both an 1117array reference and a hash reference. 1118 1119 package two_refs; 1120 use overload '%{}' => \&gethash, '@{}' => sub { $ {shift()} }; 1121 sub new { 1122 my $p = shift; 1123 bless \ [@_], $p; 1124 } 1125 sub gethash { 1126 my %h; 1127 my $self = shift; 1128 tie %h, ref $self, $self; 1129 \%h; 1130 } 1131 1132 sub TIEHASH { my $p = shift; bless \ shift, $p } 1133 my %fields; 1134 my $i = 0; 1135 $fields{$_} = $i++ foreach qw{zero one two three}; 1136 sub STORE { 1137 my $self = ${shift()}; 1138 my $key = $fields{shift()}; 1139 defined $key or die "Out of band access"; 1140 $$self->[$key] = shift; 1141 } 1142 sub FETCH { 1143 my $self = ${shift()}; 1144 my $key = $fields{shift()}; 1145 defined $key or die "Out of band access"; 1146 $$self->[$key]; 1147 } 1148 1149Now one can access an object using both the array and hash syntax: 1150 1151 my $bar = two_refs->new(3,4,5,6); 1152 $bar->[2] = 11; 1153 $bar->{two} == 11 or die 'bad hash fetch'; 1154 1155Note several important features of this example. First of all, the 1156I<actual> type of $bar is a scalar reference, and we do not overload 1157the scalar dereference. Thus we can get the I<actual> non-overloaded 1158contents of $bar by just using C<$$bar> (what we do in functions which 1159overload dereference). Similarly, the object returned by the 1160TIEHASH() method is a scalar reference. 1161 1162Second, we create a new tied hash each time the hash syntax is used. 1163This allows us not to worry about a possibility of a reference loop, 1164which would lead to a memory leak. 1165 1166Both these problems can be cured. Say, if we want to overload hash 1167dereference on a reference to an object which is I<implemented> as a 1168hash itself, the only problem one has to circumvent is how to access 1169this I<actual> hash (as opposed to the I<virtual> hash exhibited by the 1170overloaded dereference operator). Here is one possible fetching routine: 1171 1172 sub access_hash { 1173 my ($self, $key) = (shift, shift); 1174 my $class = ref $self; 1175 bless $self, 'overload::dummy'; # Disable overloading of %{} 1176 my $out = $self->{$key}; 1177 bless $self, $class; # Restore overloading 1178 $out; 1179 } 1180 1181To remove creation of the tied hash on each access, one may an extra 1182level of indirection which allows a non-circular structure of references: 1183 1184 package two_refs1; 1185 use overload '%{}' => sub { ${shift()}->[1] }, 1186 '@{}' => sub { ${shift()}->[0] }; 1187 sub new { 1188 my $p = shift; 1189 my $a = [@_]; 1190 my %h; 1191 tie %h, $p, $a; 1192 bless \ [$a, \%h], $p; 1193 } 1194 sub gethash { 1195 my %h; 1196 my $self = shift; 1197 tie %h, ref $self, $self; 1198 \%h; 1199 } 1200 1201 sub TIEHASH { my $p = shift; bless \ shift, $p } 1202 my %fields; 1203 my $i = 0; 1204 $fields{$_} = $i++ foreach qw{zero one two three}; 1205 sub STORE { 1206 my $a = ${shift()}; 1207 my $key = $fields{shift()}; 1208 defined $key or die "Out of band access"; 1209 $a->[$key] = shift; 1210 } 1211 sub FETCH { 1212 my $a = ${shift()}; 1213 my $key = $fields{shift()}; 1214 defined $key or die "Out of band access"; 1215 $a->[$key]; 1216 } 1217 1218Now if $baz is overloaded like this, then C<$baz> is a reference to a 1219reference to the intermediate array, which keeps a reference to an 1220actual array, and the access hash. The tie()ing object for the access 1221hash is a reference to a reference to the actual array, so 1222 1223=over 1224 1225=item * 1226 1227There are no loops of references. 1228 1229=item * 1230 1231Both "objects" which are blessed into the class C<two_refs1> are 1232references to a reference to an array, thus references to a I<scalar>. 1233Thus the accessor expression C<$$foo-E<gt>[$ind]> involves no 1234overloaded operations. 1235 1236=back 1237 1238=head2 Symbolic Calculator 1239 1240Put this in F<symbolic.pm> in your Perl library directory: 1241 1242 package symbolic; # Primitive symbolic calculator 1243 use overload nomethod => \&wrap; 1244 1245 sub new { shift; bless ['n', @_] } 1246 sub wrap { 1247 my ($obj, $other, $inv, $meth) = @_; 1248 ($obj, $other) = ($other, $obj) if $inv; 1249 bless [$meth, $obj, $other]; 1250 } 1251 1252This module is very unusual as overloaded modules go: it does not 1253provide any usual overloaded operators, instead it provides an 1254implementation for L<C<nomethod>>. In this example the C<nomethod> 1255subroutine returns an object which encapsulates operations done over 1256the objects: C<< symbolic->new(3) >> contains C<['n', 3]>, C<< 2 + 1257symbolic->new(3) >> contains C<['+', 2, ['n', 3]]>. 1258 1259Here is an example of the script which "calculates" the side of 1260circumscribed octagon using the above package: 1261 1262 require symbolic; 1263 my $iter = 1; # 2**($iter+2) = 8 1264 my $side = symbolic->new(1); 1265 my $cnt = $iter; 1266 1267 while ($cnt--) { 1268 $side = (sqrt(1 + $side**2) - 1)/$side; 1269 } 1270 print "OK\n"; 1271 1272The value of $side is 1273 1274 ['/', ['-', ['sqrt', ['+', 1, ['**', ['n', 1], 2]], 1275 undef], 1], ['n', 1]] 1276 1277Note that while we obtained this value using a nice little script, 1278there is no simple way to I<use> this value. In fact this value may 1279be inspected in debugger (see L<perldebug>), but only if 1280C<bareStringify> B<O>ption is set, and not via C<p> command. 1281 1282If one attempts to print this value, then the overloaded operator 1283C<""> will be called, which will call C<nomethod> operator. The 1284result of this operator will be stringified again, but this result is 1285again of type C<symbolic>, which will lead to an infinite loop. 1286 1287Add a pretty-printer method to the module F<symbolic.pm>: 1288 1289 sub pretty { 1290 my ($meth, $a, $b) = @{+shift}; 1291 $a = 'u' unless defined $a; 1292 $b = 'u' unless defined $b; 1293 $a = $a->pretty if ref $a; 1294 $b = $b->pretty if ref $b; 1295 "[$meth $a $b]"; 1296 } 1297 1298Now one can finish the script by 1299 1300 print "side = ", $side->pretty, "\n"; 1301 1302The method C<pretty> is doing object-to-string conversion, so it 1303is natural to overload the operator C<""> using this method. However, 1304inside such a method it is not necessary to pretty-print the 1305I<components> $a and $b of an object. In the above subroutine 1306C<"[$meth $a $b]"> is a catenation of some strings and components $a 1307and $b. If these components use overloading, the catenation operator 1308will look for an overloaded operator C<.>; if not present, it will 1309look for an overloaded operator C<"">. Thus it is enough to use 1310 1311 use overload nomethod => \&wrap, '""' => \&str; 1312 sub str { 1313 my ($meth, $a, $b) = @{+shift}; 1314 $a = 'u' unless defined $a; 1315 $b = 'u' unless defined $b; 1316 "[$meth $a $b]"; 1317 } 1318 1319Now one can change the last line of the script to 1320 1321 print "side = $side\n"; 1322 1323which outputs 1324 1325 side = [/ [- [sqrt [+ 1 [** [n 1 u] 2]] u] 1] [n 1 u]] 1326 1327and one can inspect the value in debugger using all the possible 1328methods. 1329 1330Something is still amiss: consider the loop variable $cnt of the 1331script. It was a number, not an object. We cannot make this value of 1332type C<symbolic>, since then the loop will not terminate. 1333 1334Indeed, to terminate the cycle, the $cnt should become false. 1335However, the operator C<bool> for checking falsity is overloaded (this 1336time via overloaded C<"">), and returns a long string, thus any object 1337of type C<symbolic> is true. To overcome this, we need a way to 1338compare an object to 0. In fact, it is easier to write a numeric 1339conversion routine. 1340 1341Here is the text of F<symbolic.pm> with such a routine added (and 1342slightly modified str()): 1343 1344 package symbolic; # Primitive symbolic calculator 1345 use overload 1346 nomethod => \&wrap, '""' => \&str, '0+' => \# 1347 1348 sub new { shift; bless ['n', @_] } 1349 sub wrap { 1350 my ($obj, $other, $inv, $meth) = @_; 1351 ($obj, $other) = ($other, $obj) if $inv; 1352 bless [$meth, $obj, $other]; 1353 } 1354 sub str { 1355 my ($meth, $a, $b) = @{+shift}; 1356 $a = 'u' unless defined $a; 1357 if (defined $b) { 1358 "[$meth $a $b]"; 1359 } else { 1360 "[$meth $a]"; 1361 } 1362 } 1363 my %subr = ( n => sub {$_[0]}, 1364 sqrt => sub {sqrt $_[0]}, 1365 '-' => sub {shift() - shift()}, 1366 '+' => sub {shift() + shift()}, 1367 '/' => sub {shift() / shift()}, 1368 '*' => sub {shift() * shift()}, 1369 '**' => sub {shift() ** shift()}, 1370 ); 1371 sub num { 1372 my ($meth, $a, $b) = @{+shift}; 1373 my $subr = $subr{$meth} 1374 or die "Do not know how to ($meth) in symbolic"; 1375 $a = $a->num if ref $a eq __PACKAGE__; 1376 $b = $b->num if ref $b eq __PACKAGE__; 1377 $subr->($a,$b); 1378 } 1379 1380All the work of numeric conversion is done in %subr and num(). Of 1381course, %subr is not complete, it contains only operators used in the 1382example below. Here is the extra-credit question: why do we need an 1383explicit recursion in num()? (Answer is at the end of this section.) 1384 1385Use this module like this: 1386 1387 require symbolic; 1388 my $iter = symbolic->new(2); # 16-gon 1389 my $side = symbolic->new(1); 1390 my $cnt = $iter; 1391 1392 while ($cnt) { 1393 $cnt = $cnt - 1; # Mutator '--' not implemented 1394 $side = (sqrt(1 + $side**2) - 1)/$side; 1395 } 1396 printf "%s=%f\n", $side, $side; 1397 printf "pi=%f\n", $side*(2**($iter+2)); 1398 1399It prints (without so many line breaks) 1400 1401 [/ [- [sqrt [+ 1 [** [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1] 1402 [n 1]] 2]]] 1] 1403 [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1] [n 1]]]=0.198912 1404 pi=3.182598 1405 1406The above module is very primitive. It does not implement 1407mutator methods (C<++>, C<-=> and so on), does not do deep copying 1408(not required without mutators!), and implements only those arithmetic 1409operations which are used in the example. 1410 1411To implement most arithmetic operations is easy; one should just use 1412the tables of operations, and change the code which fills %subr to 1413 1414 my %subr = ( 'n' => sub {$_[0]} ); 1415 foreach my $op (split " ", $overload::ops{with_assign}) { 1416 $subr{$op} = $subr{"$op="} = eval "sub {shift() $op shift()}"; 1417 } 1418 my @bins = qw(binary 3way_comparison num_comparison str_comparison); 1419 foreach my $op (split " ", "@overload::ops{ @bins }") { 1420 $subr{$op} = eval "sub {shift() $op shift()}"; 1421 } 1422 foreach my $op (split " ", "@overload::ops{qw(unary func)}") { 1423 print "defining '$op'\n"; 1424 $subr{$op} = eval "sub {$op shift()}"; 1425 } 1426 1427Since subroutines implementing assignment operators are not required 1428to modify their operands (see L<Overloadable Operations> above), 1429we do not need anything special to make C<+=> and friends work, 1430besides adding these operators to %subr and defining a copy 1431constructor (needed since Perl has no way to know that the 1432implementation of C<'+='> does not mutate the argument - 1433see L<Copy Constructor>). 1434 1435To implement a copy constructor, add C<< '=' => \&cpy >> to C<use overload> 1436line, and code (this code assumes that mutators change things one level 1437deep only, so recursive copying is not needed): 1438 1439 sub cpy { 1440 my $self = shift; 1441 bless [@$self], ref $self; 1442 } 1443 1444To make C<++> and C<--> work, we need to implement actual mutators, 1445either directly, or in C<nomethod>. We continue to do things inside 1446C<nomethod>, thus add 1447 1448 if ($meth eq '++' or $meth eq '--') { 1449 @$obj = ($meth, (bless [@$obj]), 1); # Avoid circular reference 1450 return $obj; 1451 } 1452 1453after the first line of wrap(). This is not a most effective 1454implementation, one may consider 1455 1456 sub inc { $_[0] = bless ['++', shift, 1]; } 1457 1458instead. 1459 1460As a final remark, note that one can fill %subr by 1461 1462 my %subr = ( 'n' => sub {$_[0]} ); 1463 foreach my $op (split " ", $overload::ops{with_assign}) { 1464 $subr{$op} = $subr{"$op="} = eval "sub {shift() $op shift()}"; 1465 } 1466 my @bins = qw(binary 3way_comparison num_comparison str_comparison); 1467 foreach my $op (split " ", "@overload::ops{ @bins }") { 1468 $subr{$op} = eval "sub {shift() $op shift()}"; 1469 } 1470 foreach my $op (split " ", "@overload::ops{qw(unary func)}") { 1471 $subr{$op} = eval "sub {$op shift()}"; 1472 } 1473 $subr{'++'} = $subr{'+'}; 1474 $subr{'--'} = $subr{'-'}; 1475 1476This finishes implementation of a primitive symbolic calculator in 147750 lines of Perl code. Since the numeric values of subexpressions 1478are not cached, the calculator is very slow. 1479 1480Here is the answer for the exercise: In the case of str(), we need no 1481explicit recursion since the overloaded C<.>-operator will fall back 1482to an existing overloaded operator C<"">. Overloaded arithmetic 1483operators I<do not> fall back to numeric conversion if C<fallback> is 1484not explicitly requested. Thus without an explicit recursion num() 1485would convert C<['+', $a, $b]> to C<$a + $b>, which would just rebuild 1486the argument of num(). 1487 1488If you wonder why defaults for conversion are different for str() and 1489num(), note how easy it was to write the symbolic calculator. This 1490simplicity is due to an appropriate choice of defaults. One extra 1491note: due to the explicit recursion num() is more fragile than sym(): 1492we need to explicitly check for the type of $a and $b. If components 1493$a and $b happen to be of some related type, this may lead to problems. 1494 1495=head2 I<Really> Symbolic Calculator 1496 1497One may wonder why we call the above calculator symbolic. The reason 1498is that the actual calculation of the value of expression is postponed 1499until the value is I<used>. 1500 1501To see it in action, add a method 1502 1503 sub STORE { 1504 my $obj = shift; 1505 $#$obj = 1; 1506 @$obj->[0,1] = ('=', shift); 1507 } 1508 1509to the package C<symbolic>. After this change one can do 1510 1511 my $a = symbolic->new(3); 1512 my $b = symbolic->new(4); 1513 my $c = sqrt($a**2 + $b**2); 1514 1515and the numeric value of $c becomes 5. However, after calling 1516 1517 $a->STORE(12); $b->STORE(5); 1518 1519the numeric value of $c becomes 13. There is no doubt now that the module 1520symbolic provides a I<symbolic> calculator indeed. 1521 1522To hide the rough edges under the hood, provide a tie()d interface to the 1523package C<symbolic>. Add methods 1524 1525 sub TIESCALAR { my $pack = shift; $pack->new(@_) } 1526 sub FETCH { shift } 1527 sub nop { } # Around a bug 1528 1529(the bug, fixed in Perl 5.14, is described in L<"BUGS">). One can use this 1530new interface as 1531 1532 tie $a, 'symbolic', 3; 1533 tie $b, 'symbolic', 4; 1534 $a->nop; $b->nop; # Around a bug 1535 1536 my $c = sqrt($a**2 + $b**2); 1537 1538Now numeric value of $c is 5. After C<$a = 12; $b = 5> the numeric value 1539of $c becomes 13. To insulate the user of the module add a method 1540 1541 sub vars { my $p = shift; tie($_, $p), $_->nop foreach @_; } 1542 1543Now 1544 1545 my ($a, $b); 1546 symbolic->vars($a, $b); 1547 my $c = sqrt($a**2 + $b**2); 1548 1549 $a = 3; $b = 4; 1550 printf "c5 %s=%f\n", $c, $c; 1551 1552 $a = 12; $b = 5; 1553 printf "c13 %s=%f\n", $c, $c; 1554 1555shows that the numeric value of $c follows changes to the values of $a 1556and $b. 1557 1558=head1 AUTHOR 1559 1560Ilya Zakharevich E<lt>F<ilya@math.mps.ohio-state.edu>E<gt>. 1561 1562=head1 SEE ALSO 1563 1564The C<overloading> pragma can be used to enable or disable overloaded 1565operations within a lexical scope - see L<overloading>. 1566 1567=head1 DIAGNOSTICS 1568 1569When Perl is run with the B<-Do> switch or its equivalent, overloading 1570induces diagnostic messages. 1571 1572Using the C<m> command of Perl debugger (see L<perldebug>) one can 1573deduce which operations are overloaded (and which ancestor triggers 1574this overloading). Say, if C<eq> is overloaded, then the method C<(eq> 1575is shown by debugger. The method C<()> corresponds to the C<fallback> 1576key (in fact a presence of this method shows that this package has 1577overloading enabled, and it is what is used by the C<Overloaded> 1578function of module C<overload>). 1579 1580The module might issue the following warnings: 1581 1582=over 4 1583 1584=item Odd number of arguments for overload::constant 1585 1586(W) The call to overload::constant contained an odd number of arguments. 1587The arguments should come in pairs. 1588 1589=item '%s' is not an overloadable type 1590 1591(W) You tried to overload a constant type the overload package is unaware of. 1592 1593=item '%s' is not a code reference 1594 1595(W) The second (fourth, sixth, ...) argument of overload::constant needs 1596to be a code reference. Either an anonymous subroutine, or a reference 1597to a subroutine. 1598 1599=item overload arg '%s' is invalid 1600 1601(W) C<use overload> was passed an argument it did not 1602recognize. Did you mistype an operator? 1603 1604=back 1605 1606=head1 BUGS AND PITFALLS 1607 1608=over 1609 1610=item * 1611 1612No warning is issued for invalid C<use overload> keys. 1613Such errors are not always obvious: 1614 1615 use overload "+0" => sub { ...; }, # should be "0+" 1616 "not" => sub { ...; }; # should be "!" 1617 1618(Bug #74098) 1619 1620=item * 1621 1622A pitfall when fallback is TRUE and Perl resorts to a built-in 1623implementation of an operator is that some operators have more 1624than one semantic, for example C<|>: 1625 1626 use overload '0+' => sub { $_[0]->{n}; }, 1627 fallback => 1; 1628 my $x = bless { n => 4 }, "main"; 1629 my $y = bless { n => 8 }, "main"; 1630 print $x | $y, "\n"; 1631 1632You might expect this to output "12". 1633In fact, it prints "<": the ASCII result of treating "|" 1634as a bitwise string operator - that is, the result of treating 1635the operands as the strings "4" and "8" rather than numbers. 1636The fact that numify (C<0+>) is implemented but stringify 1637(C<"">) isn't makes no difference since the latter is simply 1638autogenerated from the former. 1639 1640The only way to change this is to provide your own subroutine 1641for C<'|'>. 1642 1643=item * 1644 1645Magic autogeneration increases the potential for inadvertently 1646creating self-referential structures. 1647Currently Perl will not free self-referential 1648structures until cycles are explicitly broken. 1649For example, 1650 1651 use overload '+' => 'add'; 1652 sub add { bless [ \$_[0], \$_[1] ] }; 1653 1654is asking for trouble, since 1655 1656 $obj += $y; 1657 1658will effectively become 1659 1660 $obj = add($obj, $y, undef); 1661 1662with the same result as 1663 1664 $obj = [\$obj, \$foo]; 1665 1666Even if no I<explicit> assignment-variants of operators are present in 1667the script, they may be generated by the optimizer. 1668For example, 1669 1670 "obj = $obj\n" 1671 1672may be optimized to 1673 1674 my $tmp = 'obj = ' . $obj; $tmp .= "\n"; 1675 1676=item * 1677 1678Because it is used for overloading, the per-package hash 1679C<%OVERLOAD> now has a special meaning in Perl. 1680The symbol table is filled with names looking like line-noise. 1681 1682=item * 1683 1684For the purpose of inheritance every overloaded package behaves as if 1685C<fallback> is present (possibly undefined). This may create 1686interesting effects if some package is not overloaded, but inherits 1687from two overloaded packages. 1688 1689=item * 1690 1691Before Perl 5.14, the relation between overloading and tie()ing was broken. 1692Overloading was triggered or not based on the I<previous> class of the 1693tie()d variable. 1694 1695This happened because the presence of overloading was checked 1696too early, before any tie()d access was attempted. If the 1697class of the value FETCH()ed from the tied variable does not 1698change, a simple workaround for code that is to run on older Perl 1699versions is to access the value (via C<() = $foo> or some such) 1700immediately after tie()ing, so that after this call the I<previous> class 1701coincides with the current one. 1702 1703=item * 1704 1705Barewords are not covered by overloaded string constants. 1706 1707=back 1708 1709=cut 1710 1711