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