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