在perl中重载运算符

sno*_*kin 3 perl operator-overloading

假设我有一个受祝福的引用/对象,$a并且$b每个内部存储为hashref并具有:

$a->{_x}
$b->{_x}
Run Code Online (Sandbox Code Playgroud)

是否有可能重载算术运算,所以当我这样做时:

my $c = $a + $b;
Run Code Online (Sandbox Code Playgroud)

我将有一个$c与... $c->{_x}相等的祝福参考$a->{_x} + $b->{_x}

Ole*_*kov 6

当然.只需将您常用的构造函数用于重载子类中所需类的新对象,+并将其值设置为该总和(或其他任何您想要的值).

假设你有new一个以初始值为参数的构造函数,那就是以下几行:

sub plus {
   my $self = shift;
   my $right = (shift or 0);
   return MySuperNumberObject->new($self->{_x} + $right);
};

use overload '+' => \+
Run Code Online (Sandbox Code Playgroud)