Предполагая, что у меня есть благословенные ссылки/объекты $a и $b, каждая из которых хранится внутри как хэш-ссылка и имеет:
$a->{_x}
$b->{_x}
можно ли перегрузить арифметические операции, поэтому, когда я сделаю это:
my $c = $a + $b;
У меня будет благословенная ссылка $c с $c->{_x} равным $a->{_x} + $b->{_x}??
Ответ 1 · рейтинг 6 · Oleg V. Volkov
Конечно. Просто используйте свой обычный конструктор для нового объекта желаемого класса в перегруженном подразделе для + и установите его значение в эту сумму (или что-то еще, что вы хотите).
Предполагая, что у вас есть конструктор new, который принимает начальное значение в качестве аргумента, это будет что-то вроде:
sub plus {
my $self = shift;
my $right = (shift or 0);
return MySuperNumberObject->new($self->{_x} + $right);
};
use overload '+' => \+