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