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