1package overload; 2 3our $VERSION = '1.00'; 4 5$overload::hint_bits = 0x20000; 6 7sub nil {} 8 9sub OVERLOAD { 10 $package = shift; 11 my %arg = @_; 12 my ($sub, $fb); 13 $ {$package . "::OVERLOAD"}{dummy}++; # Register with magic by touching. 14 *{$package . "::()"} = \&nil; # Make it findable via fetchmethod. 15 for (keys %arg) { 16 if ($_ eq 'fallback') { 17 $fb = $arg{$_}; 18 } else { 19 $sub = $arg{$_}; 20 if (not ref $sub and $sub !~ /::/) { 21 $ {$package . "::(" . $_} = $sub; 22 $sub = \&nil; 23 } 24 #print STDERR "Setting `$ {'package'}::\cO$_' to \\&`$sub'.\n"; 25 *{$package . "::(" . $_} = \&{ $sub }; 26 } 27 } 28 ${$package . "::()"} = $fb; # Make it findable too (fallback only). 29} 30 31sub import { 32 $package = (caller())[0]; 33 # *{$package . "::OVERLOAD"} = \&OVERLOAD; 34 shift; 35 $package->overload::OVERLOAD(@_); 36} 37 38sub unimport { 39 $package = (caller())[0]; 40 ${$package . "::OVERLOAD"}{dummy}++; # Upgrade the table 41 shift; 42 for (@_) { 43 if ($_ eq 'fallback') { 44 undef $ {$package . "::()"}; 45 } else { 46 delete $ {$package . "::"}{"(" . $_}; 47 } 48 } 49} 50 51sub Overloaded { 52 my $package = shift; 53 $package = ref $package if ref $package; 54 $package->can('()'); 55} 56 57sub ov_method { 58 my $globref = shift; 59 return undef unless $globref; 60 my $sub = \&{*$globref}; 61 return $sub if $sub ne \&nil; 62 return shift->can($ {*$globref}); 63} 64 65sub OverloadedStringify { 66 my $package = shift; 67 $package = ref $package if ref $package; 68 #$package->can('(""') 69 ov_method mycan($package, '(""'), $package 70 or ov_method mycan($package, '(0+'), $package 71 or ov_method mycan($package, '(bool'), $package 72 or ov_method mycan($package, '(nomethod'), $package; 73} 74 75sub Method { 76 my $package = shift; 77 $package = ref $package if ref $package; 78 #my $meth = $package->can('(' . shift); 79 ov_method mycan($package, '(' . shift), $package; 80 #return $meth if $meth ne \&nil; 81 #return $ {*{$meth}}; 82} 83 84sub AddrRef { 85 my $package = ref $_[0]; 86 return "$_[0]" unless $package; 87 bless $_[0], overload::Fake; # Non-overloaded package 88 my $str = "$_[0]"; 89 bless $_[0], $package; # Back 90 $package . substr $str, index $str, '='; 91} 92 93sub StrVal { 94 (ref $_[0] && OverloadedStringify($_[0]) or ref($_[0]) eq 'Regexp') ? 95 (AddrRef(shift)) : 96 "$_[0]"; 97} 98 99sub mycan { # Real can would leave stubs. 100 my ($package, $meth) = @_; 101 return \*{$package . "::$meth"} if defined &{$package . "::$meth"}; 102 my $p; 103 foreach $p (@{$package . "::ISA"}) { 104 my $out = mycan($p, $meth); 105 return $out if $out; 106 } 107 return undef; 108} 109 110%constants = ( 111 'integer' => 0x1000, 112 'float' => 0x2000, 113 'binary' => 0x4000, 114 'q' => 0x8000, 115 'qr' => 0x10000, 116 ); 117 118%ops = ( with_assign => "+ - * / % ** << >> x .", 119 assign => "+= -= *= /= %= **= <<= >>= x= .=", 120 num_comparison => "< <= > >= == !=", 121 '3way_comparison'=> "<=> cmp", 122 str_comparison => "lt le gt ge eq ne", 123 binary => "& | ^", 124 unary => "neg ! ~", 125 mutators => '++ --', 126 func => "atan2 cos sin exp abs log sqrt int", 127 conversion => 'bool "" 0+', 128 iterators => '<>', 129 dereferencing => '${} @{} %{} &{} *{}', 130 special => 'nomethod fallback ='); 131 132use warnings::register; 133sub constant { 134 # Arguments: what, sub 135 while (@_) { 136 if (@_ == 1) { 137 warnings::warnif ("Odd number of arguments for overload::constant"); 138 last; 139 } 140 elsif (!exists $constants {$_ [0]}) { 141 warnings::warnif ("`$_[0]' is not an overloadable type"); 142 } 143 elsif (!ref $_ [1] || "$_[1]" !~ /CODE\(0x[\da-f]+\)$/) { 144 # Can't use C<ref $_[1] eq "CODE"> above as code references can be 145 # blessed, and C<ref> would return the package the ref is blessed into. 146 if (warnings::enabled) { 147 $_ [1] = "undef" unless defined $_ [1]; 148 warnings::warn ("`$_[1]' is not a code reference"); 149 } 150 } 151 else { 152 $^H{$_[0]} = $_[1]; 153 $^H |= $constants{$_[0]} | $overload::hint_bits; 154 } 155 shift, shift; 156 } 157} 158 159sub remove_constant { 160 # Arguments: what, sub 161 while (@_) { 162 delete $^H{$_[0]}; 163 $^H &= ~ $constants{$_[0]}; 164 shift, shift; 165 } 166} 167 1681; 169 170__END__ 171 172=head1 NAME 173 174overload - Package for overloading perl operations 175 176=head1 SYNOPSIS 177 178 package SomeThing; 179 180 use overload 181 '+' => \&myadd, 182 '-' => \&mysub; 183 # etc 184 ... 185 186 package main; 187 $a = new SomeThing 57; 188 $b=5+$a; 189 ... 190 if (overload::Overloaded $b) {...} 191 ... 192 $strval = overload::StrVal $b; 193 194=head1 DESCRIPTION 195 196=head2 Declaration of overloaded functions 197 198The compilation directive 199 200 package Number; 201 use overload 202 "+" => \&add, 203 "*=" => "muas"; 204 205declares function Number::add() for addition, and method muas() in 206the "class" C<Number> (or one of its base classes) 207for the assignment form C<*=> of multiplication. 208 209Arguments of this directive come in (key, value) pairs. Legal values 210are values legal inside a C<&{ ... }> call, so the name of a 211subroutine, a reference to a subroutine, or an anonymous subroutine 212will all work. Note that values specified as strings are 213interpreted as methods, not subroutines. Legal keys are listed below. 214 215The subroutine C<add> will be called to execute C<$a+$b> if $a 216is a reference to an object blessed into the package C<Number>, or if $a is 217not an object from a package with defined mathemagic addition, but $b is a 218reference to a C<Number>. It can also be called in other situations, like 219C<$a+=7>, or C<$a++>. See L<MAGIC AUTOGENERATION>. (Mathemagical 220methods refer to methods triggered by an overloaded mathematical 221operator.) 222 223Since overloading respects inheritance via the @ISA hierarchy, the 224above declaration would also trigger overloading of C<+> and C<*=> in 225all the packages which inherit from C<Number>. 226 227=head2 Calling Conventions for Binary Operations 228 229The functions specified in the C<use overload ...> directive are called 230with three (in one particular case with four, see L<Last Resort>) 231arguments. If the corresponding operation is binary, then the first 232two arguments are the two arguments of the operation. However, due to 233general object calling conventions, the first argument should always be 234an object in the package, so in the situation of C<7+$a>, the 235order of the arguments is interchanged. It probably does not matter 236when implementing the addition method, but whether the arguments 237are reversed is vital to the subtraction method. The method can 238query this information by examining the third argument, which can take 239three different values: 240 241=over 7 242 243=item FALSE 244 245the order of arguments is as in the current operation. 246 247=item TRUE 248 249the arguments are reversed. 250 251=item C<undef> 252 253the current operation is an assignment variant (as in 254C<$a+=7>), but the usual function is called instead. This additional 255information can be used to generate some optimizations. Compare 256L<Calling Conventions for Mutators>. 257 258=back 259 260=head2 Calling Conventions for Unary Operations 261 262Unary operation are considered binary operations with the second 263argument being C<undef>. Thus the functions that overloads C<{"++"}> 264is called with arguments C<($a,undef,'')> when $a++ is executed. 265 266=head2 Calling Conventions for Mutators 267 268Two types of mutators have different calling conventions: 269 270=over 271 272=item C<++> and C<--> 273 274The routines which implement these operators are expected to actually 275I<mutate> their arguments. So, assuming that $obj is a reference to a 276number, 277 278 sub incr { my $n = $ {$_[0]}; ++$n; $_[0] = bless \$n} 279 280is an appropriate implementation of overloaded C<++>. Note that 281 282 sub incr { ++$ {$_[0]} ; shift } 283 284is OK if used with preincrement and with postincrement. (In the case 285of postincrement a copying will be performed, see L<Copy Constructor>.) 286 287=item C<x=> and other assignment versions 288 289There is nothing special about these methods. They may change the 290value of their arguments, and may leave it as is. The result is going 291to be assigned to the value in the left-hand-side if different from 292this value. 293 294This allows for the same method to be used as overloaded C<+=> and 295C<+>. Note that this is I<allowed>, but not recommended, since by the 296semantic of L<"Fallback"> Perl will call the method for C<+> anyway, 297if C<+=> is not overloaded. 298 299=back 300 301B<Warning.> Due to the presence of assignment versions of operations, 302routines which may be called in assignment context may create 303self-referential structures. Currently Perl will not free self-referential 304structures until cycles are C<explicitly> broken. You may get problems 305when traversing your structures too. 306 307Say, 308 309 use overload '+' => sub { bless [ \$_[0], \$_[1] ] }; 310 311is asking for trouble, since for code C<$obj += $foo> the subroutine 312is called as C<$obj = add($obj, $foo, undef)>, or C<$obj = [\$obj, 313\$foo]>. If using such a subroutine is an important optimization, one 314can overload C<+=> explicitly by a non-"optimized" version, or switch 315to non-optimized version if C<not defined $_[2]> (see 316L<Calling Conventions for Binary Operations>). 317 318Even if no I<explicit> assignment-variants of operators are present in 319the script, they may be generated by the optimizer. Say, C<",$obj,"> or 320C<',' . $obj . ','> may be both optimized to 321 322 my $tmp = ',' . $obj; $tmp .= ','; 323 324=head2 Overloadable Operations 325 326The following symbols can be specified in C<use overload> directive: 327 328=over 5 329 330=item * I<Arithmetic operations> 331 332 "+", "+=", "-", "-=", "*", "*=", "/", "/=", "%", "%=", 333 "**", "**=", "<<", "<<=", ">>", ">>=", "x", "x=", ".", ".=", 334 335For these operations a substituted non-assignment variant can be called if 336the assignment variant is not available. Methods for operations C<+>, 337C<->, C<+=>, and C<-=> can be called to automatically generate 338increment and decrement methods. The operation C<-> can be used to 339autogenerate missing methods for unary minus or C<abs>. 340 341See L<"MAGIC AUTOGENERATION">, L<"Calling Conventions for Mutators"> and 342L<"Calling Conventions for Binary Operations">) for details of these 343substitutions. 344 345=item * I<Comparison operations> 346 347 "<", "<=", ">", ">=", "==", "!=", "<=>", 348 "lt", "le", "gt", "ge", "eq", "ne", "cmp", 349 350If the corresponding "spaceship" variant is available, it can be 351used to substitute for the missing operation. During C<sort>ing 352arrays, C<cmp> is used to compare values subject to C<use overload>. 353 354=item * I<Bit operations> 355 356 "&", "^", "|", "neg", "!", "~", 357 358C<neg> stands for unary minus. If the method for C<neg> is not 359specified, it can be autogenerated using the method for 360subtraction. If the method for C<!> is not specified, it can be 361autogenerated using the methods for C<bool>, or C<"">, or C<0+>. 362 363=item * I<Increment and decrement> 364 365 "++", "--", 366 367If undefined, addition and subtraction methods can be 368used instead. These operations are called both in prefix and 369postfix form. 370 371=item * I<Transcendental functions> 372 373 "atan2", "cos", "sin", "exp", "abs", "log", "sqrt", "int" 374 375If C<abs> is unavailable, it can be autogenerated using methods 376for "E<lt>" or "E<lt>=E<gt>" combined with either unary minus or subtraction. 377 378Note that traditionally the Perl function L<int> rounds to 0, thus for 379floating-point-like types one should follow the same semantic. If 380C<int> is unavailable, it can be autogenerated using the overloading of 381C<0+>. 382 383=item * I<Boolean, string and numeric conversion> 384 385 'bool', '""', '0+', 386 387If one or two of these operations are not overloaded, the remaining ones can 388be used instead. C<bool> is used in the flow control operators 389(like C<while>) and for the ternary C<?:> operation. These functions can 390return any arbitrary Perl value. If the corresponding operation for this value 391is overloaded too, that operation will be called again with this value. 392 393As a special case if the overload returns the object itself then it will 394be used directly. An overloaded conversion returning the object is 395probably a bug, because you're likely to get something that looks like 396C<YourPackage=HASH(0x8172b34)>. 397 398=item * I<Iteration> 399 400 "<>" 401 402If not overloaded, the argument will be converted to a filehandle or 403glob (which may require a stringification). The same overloading 404happens both for the I<read-filehandle> syntax C<E<lt>$varE<gt>> and 405I<globbing> syntax C<E<lt>${var}E<gt>>. 406 407B<BUGS> Even in list context, the iterator is currently called only 408once and with scalar context. 409 410=item * I<Dereferencing> 411 412 '${}', '@{}', '%{}', '&{}', '*{}'. 413 414If not overloaded, the argument will be dereferenced I<as is>, thus 415should be of correct type. These functions should return a reference 416of correct type, or another object with overloaded dereferencing. 417 418As a special case if the overload returns the object itself then it 419will be used directly (provided it is the correct type). 420 421The dereference operators must be specified explicitly they will not be passed to 422"nomethod". 423 424=item * I<Special> 425 426 "nomethod", "fallback", "=", 427 428see L<SPECIAL SYMBOLS FOR C<use overload>>. 429 430=back 431 432See L<"Fallback"> for an explanation of when a missing method can be 433autogenerated. 434 435A computer-readable form of the above table is available in the hash 436%overload::ops, with values being space-separated lists of names: 437 438 with_assign => '+ - * / % ** << >> x .', 439 assign => '+= -= *= /= %= **= <<= >>= x= .=', 440 num_comparison => '< <= > >= == !=', 441 '3way_comparison'=> '<=> cmp', 442 str_comparison => 'lt le gt ge eq ne', 443 binary => '& | ^', 444 unary => 'neg ! ~', 445 mutators => '++ --', 446 func => 'atan2 cos sin exp abs log sqrt', 447 conversion => 'bool "" 0+', 448 iterators => '<>', 449 dereferencing => '${} @{} %{} &{} *{}', 450 special => 'nomethod fallback =' 451 452=head2 Inheritance and overloading 453 454Inheritance interacts with overloading in two ways. 455 456=over 457 458=item Strings as values of C<use overload> directive 459 460If C<value> in 461 462 use overload key => value; 463 464is a string, it is interpreted as a method name. 465 466=item Overloading of an operation is inherited by derived classes 467 468Any class derived from an overloaded class is also overloaded. The 469set of overloaded methods is the union of overloaded methods of all 470the ancestors. If some method is overloaded in several ancestor, then 471which description will be used is decided by the usual inheritance 472rules: 473 474If C<A> inherits from C<B> and C<C> (in this order), C<B> overloads 475C<+> with C<\&D::plus_sub>, and C<C> overloads C<+> by C<"plus_meth">, 476then the subroutine C<D::plus_sub> will be called to implement 477operation C<+> for an object in package C<A>. 478 479=back 480 481Note that since the value of the C<fallback> key is not a subroutine, 482its inheritance is not governed by the above rules. In the current 483implementation, the value of C<fallback> in the first overloaded 484ancestor is used, but this is accidental and subject to change. 485 486=head1 SPECIAL SYMBOLS FOR C<use overload> 487 488Three keys are recognized by Perl that are not covered by the above 489description. 490 491=head2 Last Resort 492 493C<"nomethod"> should be followed by a reference to a function of four 494parameters. If defined, it is called when the overloading mechanism 495cannot find a method for some operation. The first three arguments of 496this function coincide with the arguments for the corresponding method if 497it were found, the fourth argument is the symbol 498corresponding to the missing method. If several methods are tried, 499the last one is used. Say, C<1-$a> can be equivalent to 500 501 &nomethodMethod($a,1,1,"-") 502 503if the pair C<"nomethod" =E<gt> "nomethodMethod"> was specified in the 504C<use overload> directive. 505 506The C<"nomethod"> mechanism is I<not> used for the dereference operators 507( ${} @{} %{} &{} *{} ). 508 509 510If some operation cannot be resolved, and there is no function 511assigned to C<"nomethod">, then an exception will be raised via die()-- 512unless C<"fallback"> was specified as a key in C<use overload> directive. 513 514 515=head2 Fallback 516 517The key C<"fallback"> governs what to do if a method for a particular 518operation is not found. Three different cases are possible depending on 519the value of C<"fallback">: 520 521=over 16 522 523=item * C<undef> 524 525Perl tries to use a 526substituted method (see L<MAGIC AUTOGENERATION>). If this fails, it 527then tries to calls C<"nomethod"> value; if missing, an exception 528will be raised. 529 530=item * TRUE 531 532The same as for the C<undef> value, but no exception is raised. Instead, 533it silently reverts to what it would have done were there no C<use overload> 534present. 535 536=item * defined, but FALSE 537 538No autogeneration is tried. Perl tries to call 539C<"nomethod"> value, and if this is missing, raises an exception. 540 541=back 542 543B<Note.> C<"fallback"> inheritance via @ISA is not carved in stone 544yet, see L<"Inheritance and overloading">. 545 546=head2 Copy Constructor 547 548The value for C<"="> is a reference to a function with three 549arguments, i.e., it looks like the other values in C<use 550overload>. However, it does not overload the Perl assignment 551operator. This would go against Camel hair. 552 553This operation is called in the situations when a mutator is applied 554to a reference that shares its object with some other reference, such 555as 556 557 $a=$b; 558 ++$a; 559 560To make this change $a and not change $b, a copy of C<$$a> is made, 561and $a is assigned a reference to this new object. This operation is 562done during execution of the C<++$a>, and not during the assignment, 563(so before the increment C<$$a> coincides with C<$$b>). This is only 564done if C<++> is expressed via a method for C<'++'> or C<'+='> (or 565C<nomethod>). Note that if this operation is expressed via C<'+'> 566a nonmutator, i.e., as in 567 568 $a=$b; 569 $a=$a+1; 570 571then C<$a> does not reference a new copy of C<$$a>, since $$a does not 572appear as lvalue when the above code is executed. 573 574If the copy constructor is required during the execution of some mutator, 575but a method for C<'='> was not specified, it can be autogenerated as a 576string copy if the object is a plain scalar. 577 578=over 5 579 580=item B<Example> 581 582The actually executed code for 583 584 $a=$b; 585 Something else which does not modify $a or $b.... 586 ++$a; 587 588may be 589 590 $a=$b; 591 Something else which does not modify $a or $b.... 592 $a = $a->clone(undef,""); 593 $a->incr(undef,""); 594 595if $b was mathemagical, and C<'++'> was overloaded with C<\&incr>, 596C<'='> was overloaded with C<\&clone>. 597 598=back 599 600Same behaviour is triggered by C<$b = $a++>, which is consider a synonym for 601C<$b = $a; ++$a>. 602 603=head1 MAGIC AUTOGENERATION 604 605If a method for an operation is not found, and the value for C<"fallback"> is 606TRUE or undefined, Perl tries to autogenerate a substitute method for 607the missing operation based on the defined operations. Autogenerated method 608substitutions are possible for the following operations: 609 610=over 16 611 612=item I<Assignment forms of arithmetic operations> 613 614C<$a+=$b> can use the method for C<"+"> if the method for C<"+="> 615is not defined. 616 617=item I<Conversion operations> 618 619String, numeric, and boolean conversion are calculated in terms of one 620another if not all of them are defined. 621 622=item I<Increment and decrement> 623 624The C<++$a> operation can be expressed in terms of C<$a+=1> or C<$a+1>, 625and C<$a--> in terms of C<$a-=1> and C<$a-1>. 626 627=item C<abs($a)> 628 629can be expressed in terms of C<$aE<lt>0> and C<-$a> (or C<0-$a>). 630 631=item I<Unary minus> 632 633can be expressed in terms of subtraction. 634 635=item I<Negation> 636 637C<!> and C<not> can be expressed in terms of boolean conversion, or 638string or numerical conversion. 639 640=item I<Concatenation> 641 642can be expressed in terms of string conversion. 643 644=item I<Comparison operations> 645 646can be expressed in terms of its "spaceship" counterpart: either 647C<E<lt>=E<gt>> or C<cmp>: 648 649 <, >, <=, >=, ==, != in terms of <=> 650 lt, gt, le, ge, eq, ne in terms of cmp 651 652=item I<Iterator> 653 654 <> in terms of builtin operations 655 656=item I<Dereferencing> 657 658 ${} @{} %{} &{} *{} in terms of builtin operations 659 660=item I<Copy operator> 661 662can be expressed in terms of an assignment to the dereferenced value, if this 663value is a scalar and not a reference. 664 665=back 666 667=head1 Losing overloading 668 669The restriction for the comparison operation is that even if, for example, 670`C<cmp>' should return a blessed reference, the autogenerated `C<lt>' 671function will produce only a standard logical value based on the 672numerical value of the result of `C<cmp>'. In particular, a working 673numeric conversion is needed in this case (possibly expressed in terms of 674other conversions). 675 676Similarly, C<.=> and C<x=> operators lose their mathemagical properties 677if the string conversion substitution is applied. 678 679When you chop() a mathemagical object it is promoted to a string and its 680mathemagical properties are lost. The same can happen with other 681operations as well. 682 683=head1 Run-time Overloading 684 685Since all C<use> directives are executed at compile-time, the only way to 686change overloading during run-time is to 687 688 eval 'use overload "+" => \&addmethod'; 689 690You can also use 691 692 eval 'no overload "+", "--", "<="'; 693 694though the use of these constructs during run-time is questionable. 695 696=head1 Public functions 697 698Package C<overload.pm> provides the following public functions: 699 700=over 5 701 702=item overload::StrVal(arg) 703 704Gives string value of C<arg> as in absence of stringify overloading. 705 706=item overload::Overloaded(arg) 707 708Returns true if C<arg> is subject to overloading of some operations. 709 710=item overload::Method(obj,op) 711 712Returns C<undef> or a reference to the method that implements C<op>. 713 714=back 715 716=head1 Overloading constants 717 718For some application Perl parser mangles constants too much. It is possible 719to hook into this process via overload::constant() and overload::remove_constant() 720functions. 721 722These functions take a hash as an argument. The recognized keys of this hash 723are 724 725=over 8 726 727=item integer 728 729to overload integer constants, 730 731=item float 732 733to overload floating point constants, 734 735=item binary 736 737to overload octal and hexadecimal constants, 738 739=item q 740 741to overload C<q>-quoted strings, constant pieces of C<qq>- and C<qx>-quoted 742strings and here-documents, 743 744=item qr 745 746to overload constant pieces of regular expressions. 747 748=back 749 750The corresponding values are references to functions which take three arguments: 751the first one is the I<initial> string form of the constant, the second one 752is how Perl interprets this constant, the third one is how the constant is used. 753Note that the initial string form does not 754contain string delimiters, and has backslashes in backslash-delimiter 755combinations stripped (thus the value of delimiter is not relevant for 756processing of this string). The return value of this function is how this 757constant is going to be interpreted by Perl. The third argument is undefined 758unless for overloaded C<q>- and C<qr>- constants, it is C<q> in single-quote 759context (comes from strings, regular expressions, and single-quote HERE 760documents), it is C<tr> for arguments of C<tr>/C<y> operators, 761it is C<s> for right-hand side of C<s>-operator, and it is C<qq> otherwise. 762 763Since an expression C<"ab$cd,,"> is just a shortcut for C<'ab' . $cd . ',,'>, 764it is expected that overloaded constant strings are equipped with reasonable 765overloaded catenation operator, otherwise absurd results will result. 766Similarly, negative numbers are considered as negations of positive constants. 767 768Note that it is probably meaningless to call the functions overload::constant() 769and overload::remove_constant() from anywhere but import() and unimport() methods. 770From these methods they may be called as 771 772 sub import { 773 shift; 774 return unless @_; 775 die "unknown import: @_" unless @_ == 1 and $_[0] eq ':constant'; 776 overload::constant integer => sub {Math::BigInt->new(shift)}; 777 } 778 779B<BUGS> Currently overloaded-ness of constants does not propagate 780into C<eval '...'>. 781 782=head1 IMPLEMENTATION 783 784What follows is subject to change RSN. 785 786The table of methods for all operations is cached in magic for the 787symbol table hash for the package. The cache is invalidated during 788processing of C<use overload>, C<no overload>, new function 789definitions, and changes in @ISA. However, this invalidation remains 790unprocessed until the next C<bless>ing into the package. Hence if you 791want to change overloading structure dynamically, you'll need an 792additional (fake) C<bless>ing to update the table. 793 794(Every SVish thing has a magic queue, and magic is an entry in that 795queue. This is how a single variable may participate in multiple 796forms of magic simultaneously. For instance, environment variables 797regularly have two forms at once: their %ENV magic and their taint 798magic. However, the magic which implements overloading is applied to 799the stashes, which are rarely used directly, thus should not slow down 800Perl.) 801 802If an object belongs to a package using overload, it carries a special 803flag. Thus the only speed penalty during arithmetic operations without 804overloading is the checking of this flag. 805 806In fact, if C<use overload> is not present, there is almost no overhead 807for overloadable operations, so most programs should not suffer 808measurable performance penalties. A considerable effort was made to 809minimize the overhead when overload is used in some package, but the 810arguments in question do not belong to packages using overload. When 811in doubt, test your speed with C<use overload> and without it. So far 812there have been no reports of substantial speed degradation if Perl is 813compiled with optimization turned on. 814 815There is no size penalty for data if overload is not used. The only 816size penalty if overload is used in some package is that I<all> the 817packages acquire a magic during the next C<bless>ing into the 818package. This magic is three-words-long for packages without 819overloading, and carries the cache table if the package is overloaded. 820 821Copying (C<$a=$b>) is shallow; however, a one-level-deep copying is 822carried out before any operation that can imply an assignment to the 823object $a (or $b) refers to, like C<$a++>. You can override this 824behavior by defining your own copy constructor (see L<"Copy Constructor">). 825 826It is expected that arguments to methods that are not explicitly supposed 827to be changed are constant (but this is not enforced). 828 829=head1 Metaphor clash 830 831One may wonder why the semantic of overloaded C<=> is so counter intuitive. 832If it I<looks> counter intuitive to you, you are subject to a metaphor 833clash. 834 835Here is a Perl object metaphor: 836 837I< object is a reference to blessed data> 838 839and an arithmetic metaphor: 840 841I< object is a thing by itself>. 842 843The I<main> problem of overloading C<=> is the fact that these metaphors 844imply different actions on the assignment C<$a = $b> if $a and $b are 845objects. Perl-think implies that $a becomes a reference to whatever 846$b was referencing. Arithmetic-think implies that the value of "object" 847$a is changed to become the value of the object $b, preserving the fact 848that $a and $b are separate entities. 849 850The difference is not relevant in the absence of mutators. After 851a Perl-way assignment an operation which mutates the data referenced by $a 852would change the data referenced by $b too. Effectively, after 853C<$a = $b> values of $a and $b become I<indistinguishable>. 854 855On the other hand, anyone who has used algebraic notation knows the 856expressive power of the arithmetic metaphor. Overloading works hard 857to enable this metaphor while preserving the Perlian way as far as 858possible. Since it is not possible to freely mix two contradicting 859metaphors, overloading allows the arithmetic way to write things I<as 860far as all the mutators are called via overloaded access only>. The 861way it is done is described in L<Copy Constructor>. 862 863If some mutator methods are directly applied to the overloaded values, 864one may need to I<explicitly unlink> other values which references the 865same value: 866 867 $a = new Data 23; 868 ... 869 $b = $a; # $b is "linked" to $a 870 ... 871 $a = $a->clone; # Unlink $b from $a 872 $a->increment_by(4); 873 874Note that overloaded access makes this transparent: 875 876 $a = new Data 23; 877 $b = $a; # $b is "linked" to $a 878 $a += 4; # would unlink $b automagically 879 880However, it would not make 881 882 $a = new Data 23; 883 $a = 4; # Now $a is a plain 4, not 'Data' 884 885preserve "objectness" of $a. But Perl I<has> a way to make assignments 886to an object do whatever you want. It is just not the overload, but 887tie()ing interface (see L<perlfunc/tie>). Adding a FETCH() method 888which returns the object itself, and STORE() method which changes the 889value of the object, one can reproduce the arithmetic metaphor in its 890completeness, at least for variables which were tie()d from the start. 891 892(Note that a workaround for a bug may be needed, see L<"BUGS">.) 893 894=head1 Cookbook 895 896Please add examples to what follows! 897 898=head2 Two-face scalars 899 900Put this in F<two_face.pm> in your Perl library directory: 901 902 package two_face; # Scalars with separate string and 903 # numeric values. 904 sub new { my $p = shift; bless [@_], $p } 905 use overload '""' => \&str, '0+' => \&num, fallback => 1; 906 sub num {shift->[1]} 907 sub str {shift->[0]} 908 909Use it as follows: 910 911 require two_face; 912 my $seven = new two_face ("vii", 7); 913 printf "seven=$seven, seven=%d, eight=%d\n", $seven, $seven+1; 914 print "seven contains `i'\n" if $seven =~ /i/; 915 916(The second line creates a scalar which has both a string value, and a 917numeric value.) This prints: 918 919 seven=vii, seven=7, eight=8 920 seven contains `i' 921 922=head2 Two-face references 923 924Suppose you want to create an object which is accessible as both an 925array reference and a hash reference, similar to the 926L<pseudo-hash|perlref/"Pseudo-hashes: Using an array as a hash"> 927builtin Perl type. Let's make it better than a pseudo-hash by 928allowing index 0 to be treated as a normal element. 929 930 package two_refs; 931 use overload '%{}' => \&gethash, '@{}' => sub { $ {shift()} }; 932 sub new { 933 my $p = shift; 934 bless \ [@_], $p; 935 } 936 sub gethash { 937 my %h; 938 my $self = shift; 939 tie %h, ref $self, $self; 940 \%h; 941 } 942 943 sub TIEHASH { my $p = shift; bless \ shift, $p } 944 my %fields; 945 my $i = 0; 946 $fields{$_} = $i++ foreach qw{zero one two three}; 947 sub STORE { 948 my $self = ${shift()}; 949 my $key = $fields{shift()}; 950 defined $key or die "Out of band access"; 951 $$self->[$key] = shift; 952 } 953 sub FETCH { 954 my $self = ${shift()}; 955 my $key = $fields{shift()}; 956 defined $key or die "Out of band access"; 957 $$self->[$key]; 958 } 959 960Now one can access an object using both the array and hash syntax: 961 962 my $bar = new two_refs 3,4,5,6; 963 $bar->[2] = 11; 964 $bar->{two} == 11 or die 'bad hash fetch'; 965 966Note several important features of this example. First of all, the 967I<actual> type of $bar is a scalar reference, and we do not overload 968the scalar dereference. Thus we can get the I<actual> non-overloaded 969contents of $bar by just using C<$$bar> (what we do in functions which 970overload dereference). Similarly, the object returned by the 971TIEHASH() method is a scalar reference. 972 973Second, we create a new tied hash each time the hash syntax is used. 974This allows us not to worry about a possibility of a reference loop, 975which would lead to a memory leak. 976 977Both these problems can be cured. Say, if we want to overload hash 978dereference on a reference to an object which is I<implemented> as a 979hash itself, the only problem one has to circumvent is how to access 980this I<actual> hash (as opposed to the I<virtual> hash exhibited by the 981overloaded dereference operator). Here is one possible fetching routine: 982 983 sub access_hash { 984 my ($self, $key) = (shift, shift); 985 my $class = ref $self; 986 bless $self, 'overload::dummy'; # Disable overloading of %{} 987 my $out = $self->{$key}; 988 bless $self, $class; # Restore overloading 989 $out; 990 } 991 992To remove creation of the tied hash on each access, one may an extra 993level of indirection which allows a non-circular structure of references: 994 995 package two_refs1; 996 use overload '%{}' => sub { ${shift()}->[1] }, 997 '@{}' => sub { ${shift()}->[0] }; 998 sub new { 999 my $p = shift; 1000 my $a = [@_]; 1001 my %h; 1002 tie %h, $p, $a; 1003 bless \ [$a, \%h], $p; 1004 } 1005 sub gethash { 1006 my %h; 1007 my $self = shift; 1008 tie %h, ref $self, $self; 1009 \%h; 1010 } 1011 1012 sub TIEHASH { my $p = shift; bless \ shift, $p } 1013 my %fields; 1014 my $i = 0; 1015 $fields{$_} = $i++ foreach qw{zero one two three}; 1016 sub STORE { 1017 my $a = ${shift()}; 1018 my $key = $fields{shift()}; 1019 defined $key or die "Out of band access"; 1020 $a->[$key] = shift; 1021 } 1022 sub FETCH { 1023 my $a = ${shift()}; 1024 my $key = $fields{shift()}; 1025 defined $key or die "Out of band access"; 1026 $a->[$key]; 1027 } 1028 1029Now if $baz is overloaded like this, then C<$baz> is a reference to a 1030reference to the intermediate array, which keeps a reference to an 1031actual array, and the access hash. The tie()ing object for the access 1032hash is a reference to a reference to the actual array, so 1033 1034=over 1035 1036=item * 1037 1038There are no loops of references. 1039 1040=item * 1041 1042Both "objects" which are blessed into the class C<two_refs1> are 1043references to a reference to an array, thus references to a I<scalar>. 1044Thus the accessor expression C<$$foo-E<gt>[$ind]> involves no 1045overloaded operations. 1046 1047=back 1048 1049=head2 Symbolic calculator 1050 1051Put this in F<symbolic.pm> in your Perl library directory: 1052 1053 package symbolic; # Primitive symbolic calculator 1054 use overload nomethod => \&wrap; 1055 1056 sub new { shift; bless ['n', @_] } 1057 sub wrap { 1058 my ($obj, $other, $inv, $meth) = @_; 1059 ($obj, $other) = ($other, $obj) if $inv; 1060 bless [$meth, $obj, $other]; 1061 } 1062 1063This module is very unusual as overloaded modules go: it does not 1064provide any usual overloaded operators, instead it provides the L<Last 1065Resort> operator C<nomethod>. In this example the corresponding 1066subroutine returns an object which encapsulates operations done over 1067the objects: C<new symbolic 3> contains C<['n', 3]>, C<2 + new 1068symbolic 3> contains C<['+', 2, ['n', 3]]>. 1069 1070Here is an example of the script which "calculates" the side of 1071circumscribed octagon using the above package: 1072 1073 require symbolic; 1074 my $iter = 1; # 2**($iter+2) = 8 1075 my $side = new symbolic 1; 1076 my $cnt = $iter; 1077 1078 while ($cnt--) { 1079 $side = (sqrt(1 + $side**2) - 1)/$side; 1080 } 1081 print "OK\n"; 1082 1083The value of $side is 1084 1085 ['/', ['-', ['sqrt', ['+', 1, ['**', ['n', 1], 2]], 1086 undef], 1], ['n', 1]] 1087 1088Note that while we obtained this value using a nice little script, 1089there is no simple way to I<use> this value. In fact this value may 1090be inspected in debugger (see L<perldebug>), but ony if 1091C<bareStringify> B<O>ption is set, and not via C<p> command. 1092 1093If one attempts to print this value, then the overloaded operator 1094C<""> will be called, which will call C<nomethod> operator. The 1095result of this operator will be stringified again, but this result is 1096again of type C<symbolic>, which will lead to an infinite loop. 1097 1098Add a pretty-printer method to the module F<symbolic.pm>: 1099 1100 sub pretty { 1101 my ($meth, $a, $b) = @{+shift}; 1102 $a = 'u' unless defined $a; 1103 $b = 'u' unless defined $b; 1104 $a = $a->pretty if ref $a; 1105 $b = $b->pretty if ref $b; 1106 "[$meth $a $b]"; 1107 } 1108 1109Now one can finish the script by 1110 1111 print "side = ", $side->pretty, "\n"; 1112 1113The method C<pretty> is doing object-to-string conversion, so it 1114is natural to overload the operator C<""> using this method. However, 1115inside such a method it is not necessary to pretty-print the 1116I<components> $a and $b of an object. In the above subroutine 1117C<"[$meth $a $b]"> is a catenation of some strings and components $a 1118and $b. If these components use overloading, the catenation operator 1119will look for an overloaded operator C<.>; if not present, it will 1120look for an overloaded operator C<"">. Thus it is enough to use 1121 1122 use overload nomethod => \&wrap, '""' => \&str; 1123 sub str { 1124 my ($meth, $a, $b) = @{+shift}; 1125 $a = 'u' unless defined $a; 1126 $b = 'u' unless defined $b; 1127 "[$meth $a $b]"; 1128 } 1129 1130Now one can change the last line of the script to 1131 1132 print "side = $side\n"; 1133 1134which outputs 1135 1136 side = [/ [- [sqrt [+ 1 [** [n 1 u] 2]] u] 1] [n 1 u]] 1137 1138and one can inspect the value in debugger using all the possible 1139methods. 1140 1141Something is still amiss: consider the loop variable $cnt of the 1142script. It was a number, not an object. We cannot make this value of 1143type C<symbolic>, since then the loop will not terminate. 1144 1145Indeed, to terminate the cycle, the $cnt should become false. 1146However, the operator C<bool> for checking falsity is overloaded (this 1147time via overloaded C<"">), and returns a long string, thus any object 1148of type C<symbolic> is true. To overcome this, we need a way to 1149compare an object to 0. In fact, it is easier to write a numeric 1150conversion routine. 1151 1152Here is the text of F<symbolic.pm> with such a routine added (and 1153slightly modified str()): 1154 1155 package symbolic; # Primitive symbolic calculator 1156 use overload 1157 nomethod => \&wrap, '""' => \&str, '0+' => \# 1158 1159 sub new { shift; bless ['n', @_] } 1160 sub wrap { 1161 my ($obj, $other, $inv, $meth) = @_; 1162 ($obj, $other) = ($other, $obj) if $inv; 1163 bless [$meth, $obj, $other]; 1164 } 1165 sub str { 1166 my ($meth, $a, $b) = @{+shift}; 1167 $a = 'u' unless defined $a; 1168 if (defined $b) { 1169 "[$meth $a $b]"; 1170 } else { 1171 "[$meth $a]"; 1172 } 1173 } 1174 my %subr = ( n => sub {$_[0]}, 1175 sqrt => sub {sqrt $_[0]}, 1176 '-' => sub {shift() - shift()}, 1177 '+' => sub {shift() + shift()}, 1178 '/' => sub {shift() / shift()}, 1179 '*' => sub {shift() * shift()}, 1180 '**' => sub {shift() ** shift()}, 1181 ); 1182 sub num { 1183 my ($meth, $a, $b) = @{+shift}; 1184 my $subr = $subr{$meth} 1185 or die "Do not know how to ($meth) in symbolic"; 1186 $a = $a->num if ref $a eq __PACKAGE__; 1187 $b = $b->num if ref $b eq __PACKAGE__; 1188 $subr->($a,$b); 1189 } 1190 1191All the work of numeric conversion is done in %subr and num(). Of 1192course, %subr is not complete, it contains only operators used in the 1193example below. Here is the extra-credit question: why do we need an 1194explicit recursion in num()? (Answer is at the end of this section.) 1195 1196Use this module like this: 1197 1198 require symbolic; 1199 my $iter = new symbolic 2; # 16-gon 1200 my $side = new symbolic 1; 1201 my $cnt = $iter; 1202 1203 while ($cnt) { 1204 $cnt = $cnt - 1; # Mutator `--' not implemented 1205 $side = (sqrt(1 + $side**2) - 1)/$side; 1206 } 1207 printf "%s=%f\n", $side, $side; 1208 printf "pi=%f\n", $side*(2**($iter+2)); 1209 1210It prints (without so many line breaks) 1211 1212 [/ [- [sqrt [+ 1 [** [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1] 1213 [n 1]] 2]]] 1] 1214 [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1] [n 1]]]=0.198912 1215 pi=3.182598 1216 1217The above module is very primitive. It does not implement 1218mutator methods (C<++>, C<-=> and so on), does not do deep copying 1219(not required without mutators!), and implements only those arithmetic 1220operations which are used in the example. 1221 1222To implement most arithmetic operations is easy; one should just use 1223the tables of operations, and change the code which fills %subr to 1224 1225 my %subr = ( 'n' => sub {$_[0]} ); 1226 foreach my $op (split " ", $overload::ops{with_assign}) { 1227 $subr{$op} = $subr{"$op="} = eval "sub {shift() $op shift()}"; 1228 } 1229 my @bins = qw(binary 3way_comparison num_comparison str_comparison); 1230 foreach my $op (split " ", "@overload::ops{ @bins }") { 1231 $subr{$op} = eval "sub {shift() $op shift()}"; 1232 } 1233 foreach my $op (split " ", "@overload::ops{qw(unary func)}") { 1234 print "defining `$op'\n"; 1235 $subr{$op} = eval "sub {$op shift()}"; 1236 } 1237 1238Due to L<Calling Conventions for Mutators>, we do not need anything 1239special to make C<+=> and friends work, except filling C<+=> entry of 1240%subr, and defining a copy constructor (needed since Perl has no 1241way to know that the implementation of C<'+='> does not mutate 1242the argument, compare L<Copy Constructor>). 1243 1244To implement a copy constructor, add C<< '=' => \&cpy >> to C<use overload> 1245line, and code (this code assumes that mutators change things one level 1246deep only, so recursive copying is not needed): 1247 1248 sub cpy { 1249 my $self = shift; 1250 bless [@$self], ref $self; 1251 } 1252 1253To make C<++> and C<--> work, we need to implement actual mutators, 1254either directly, or in C<nomethod>. We continue to do things inside 1255C<nomethod>, thus add 1256 1257 if ($meth eq '++' or $meth eq '--') { 1258 @$obj = ($meth, (bless [@$obj]), 1); # Avoid circular reference 1259 return $obj; 1260 } 1261 1262after the first line of wrap(). This is not a most effective 1263implementation, one may consider 1264 1265 sub inc { $_[0] = bless ['++', shift, 1]; } 1266 1267instead. 1268 1269As a final remark, note that one can fill %subr by 1270 1271 my %subr = ( 'n' => sub {$_[0]} ); 1272 foreach my $op (split " ", $overload::ops{with_assign}) { 1273 $subr{$op} = $subr{"$op="} = eval "sub {shift() $op shift()}"; 1274 } 1275 my @bins = qw(binary 3way_comparison num_comparison str_comparison); 1276 foreach my $op (split " ", "@overload::ops{ @bins }") { 1277 $subr{$op} = eval "sub {shift() $op shift()}"; 1278 } 1279 foreach my $op (split " ", "@overload::ops{qw(unary func)}") { 1280 $subr{$op} = eval "sub {$op shift()}"; 1281 } 1282 $subr{'++'} = $subr{'+'}; 1283 $subr{'--'} = $subr{'-'}; 1284 1285This finishes implementation of a primitive symbolic calculator in 128650 lines of Perl code. Since the numeric values of subexpressions 1287are not cached, the calculator is very slow. 1288 1289Here is the answer for the exercise: In the case of str(), we need no 1290explicit recursion since the overloaded C<.>-operator will fall back 1291to an existing overloaded operator C<"">. Overloaded arithmetic 1292operators I<do not> fall back to numeric conversion if C<fallback> is 1293not explicitly requested. Thus without an explicit recursion num() 1294would convert C<['+', $a, $b]> to C<$a + $b>, which would just rebuild 1295the argument of num(). 1296 1297If you wonder why defaults for conversion are different for str() and 1298num(), note how easy it was to write the symbolic calculator. This 1299simplicity is due to an appropriate choice of defaults. One extra 1300note: due to the explicit recursion num() is more fragile than sym(): 1301we need to explicitly check for the type of $a and $b. If components 1302$a and $b happen to be of some related type, this may lead to problems. 1303 1304=head2 I<Really> symbolic calculator 1305 1306One may wonder why we call the above calculator symbolic. The reason 1307is that the actual calculation of the value of expression is postponed 1308until the value is I<used>. 1309 1310To see it in action, add a method 1311 1312 sub STORE { 1313 my $obj = shift; 1314 $#$obj = 1; 1315 @$obj->[0,1] = ('=', shift); 1316 } 1317 1318to the package C<symbolic>. After this change one can do 1319 1320 my $a = new symbolic 3; 1321 my $b = new symbolic 4; 1322 my $c = sqrt($a**2 + $b**2); 1323 1324and the numeric value of $c becomes 5. However, after calling 1325 1326 $a->STORE(12); $b->STORE(5); 1327 1328the numeric value of $c becomes 13. There is no doubt now that the module 1329symbolic provides a I<symbolic> calculator indeed. 1330 1331To hide the rough edges under the hood, provide a tie()d interface to the 1332package C<symbolic> (compare with L<Metaphor clash>). Add methods 1333 1334 sub TIESCALAR { my $pack = shift; $pack->new(@_) } 1335 sub FETCH { shift } 1336 sub nop { } # Around a bug 1337 1338(the bug is described in L<"BUGS">). One can use this new interface as 1339 1340 tie $a, 'symbolic', 3; 1341 tie $b, 'symbolic', 4; 1342 $a->nop; $b->nop; # Around a bug 1343 1344 my $c = sqrt($a**2 + $b**2); 1345 1346Now numeric value of $c is 5. After C<$a = 12; $b = 5> the numeric value 1347of $c becomes 13. To insulate the user of the module add a method 1348 1349 sub vars { my $p = shift; tie($_, $p), $_->nop foreach @_; } 1350 1351Now 1352 1353 my ($a, $b); 1354 symbolic->vars($a, $b); 1355 my $c = sqrt($a**2 + $b**2); 1356 1357 $a = 3; $b = 4; 1358 printf "c5 %s=%f\n", $c, $c; 1359 1360 $a = 12; $b = 5; 1361 printf "c13 %s=%f\n", $c, $c; 1362 1363shows that the numeric value of $c follows changes to the values of $a 1364and $b. 1365 1366=head1 AUTHOR 1367 1368Ilya Zakharevich E<lt>F<ilya@math.mps.ohio-state.edu>E<gt>. 1369 1370=head1 DIAGNOSTICS 1371 1372When Perl is run with the B<-Do> switch or its equivalent, overloading 1373induces diagnostic messages. 1374 1375Using the C<m> command of Perl debugger (see L<perldebug>) one can 1376deduce which operations are overloaded (and which ancestor triggers 1377this overloading). Say, if C<eq> is overloaded, then the method C<(eq> 1378is shown by debugger. The method C<()> corresponds to the C<fallback> 1379key (in fact a presence of this method shows that this package has 1380overloading enabled, and it is what is used by the C<Overloaded> 1381function of module C<overload>). 1382 1383The module might issue the following warnings: 1384 1385=over 4 1386 1387=item Odd number of arguments for overload::constant 1388 1389(W) The call to overload::constant contained an odd number of arguments. 1390The arguments should come in pairs. 1391 1392=item `%s' is not an overloadable type 1393 1394(W) You tried to overload a constant type the overload package is unaware of. 1395 1396=item `%s' is not a code reference 1397 1398(W) The second (fourth, sixth, ...) argument of overload::constant needs 1399to be a code reference. Either an anonymous subroutine, or a reference 1400to a subroutine. 1401 1402=back 1403 1404=head1 BUGS 1405 1406Because it is used for overloading, the per-package hash %OVERLOAD now 1407has a special meaning in Perl. The symbol table is filled with names 1408looking like line-noise. 1409 1410For the purpose of inheritance every overloaded package behaves as if 1411C<fallback> is present (possibly undefined). This may create 1412interesting effects if some package is not overloaded, but inherits 1413from two overloaded packages. 1414 1415Relation between overloading and tie()ing is broken. Overloading is 1416triggered or not basing on the I<previous> class of tie()d value. 1417 1418This happens because the presence of overloading is checked too early, 1419before any tie()d access is attempted. If the FETCH()ed class of the 1420tie()d value does not change, a simple workaround is to access the value 1421immediately after tie()ing, so that after this call the I<previous> class 1422coincides with the current one. 1423 1424B<Needed:> a way to fix this without a speed penalty. 1425 1426Barewords are not covered by overloaded string constants. 1427 1428This document is confusing. There are grammos and misleading language 1429used in places. It would seem a total rewrite is needed. 1430 1431=cut 1432 1433