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