在 Perl 中重载 '='

Overloading '=' in Perl

由于在 Perl 中简单地重载 '=' 并不像人们期望的那样,正确的方法是什么?

引自overload perldoc:

Simple assignment is not overloadable (the '=' key is used for the Copy Constructor). Perl does have a way to make assignments to an object do whatever you want, but this involves using tie(), not overload - see tie and the COOKBOOK examples below.

我已经通读了 COOKBOOK and the documentation for tie 并且无法弄清楚如何以这种方式使用它。


我希望能够像这样创建一个对象:my $object = Object->new()然后当我将它分配给某些东西时我希望它做一些特殊处理。

例如:$object = 3 会在内部做类似 $object->set_value(3);

的事情

我知道这不一定是好的做法。这更像是一个教育问题。我只想知道 如何 这可以做到。不是是否应该完成。

你不能那样做。您可以为变量添加魔法,以便在为变量赋值后调用 sub,但这与您的要求相去甚远。


另外,你问的也不是很明白。下面应该怎么做?

my $object;
$object = Object->new();
$object = Object->new();

上面引用的 perl 文档措辞不佳。无法将赋值重载到当前包含某些特定对象或其他对象的某些存储位置(即变量);变量的当前值对于赋值从来都不重要。

但是,您可以直接向该变量添加魔法,捕获存储到其中的尝试(SET 魔法,由绑定 [=16] 的 STORE 方法实现=]).但重要的是要意识到这是变量本身的魔法,而不是它当前包含的值。