以下代码无法按预期方式工作.我错过了什么?
use strict; use warnings; use overload '|' => sub { 1 / ( 1 / $_[0] + 1 / $_[1] ) }; print( 5 | 5 ); # Prints '5' instead of '2.5'
解决方法
过载仅适用于有福的引用(“对象”).
package MyNumber; use strict; use warnings; use overload '|' => sub { 1 / ( 1 / +$_[0] + 1 / +$_[1] ) },'0+' => sub { $_[0]->{value} },# Cast to number fallback => 1; # Allow fallback conversions # "Constructor",bless number as MyNumber sub num { my $self = { value => $_[0] }; # can be any reference return bless $self,"MyNumber"; } print(num(5) | num(5)); my $a = num(5); print ($a | 5); # This works too