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