在Perl中有没有一种方法可以重载/截获重载对象上的函数调用?

在Perl中有没有一种方法可以重载/截获重载对象上的函数调用?,perl,function,overloading,Perl,Function,Overloading,以类似于重载运算符的方式,是否有一种方法可以对变量应用某种魔法,以便: my $magic_var = ...; some_function($magic_var); 将导致如下结果: call_function(\&some_function, $magic_var) 如果未定义some_函数,我可以使用AUTOLOADsub来捕获调用,但是当它被定义时,我不知道有什么方法可以拦截调用(没有一些疯狂的事情,比如在调用方的所有sub周围注入包装器,或者暂时取消定义所有sub) 另一

以类似于重载运算符的方式,是否有一种方法可以对变量应用某种魔法,以便:

my $magic_var = ...;

some_function($magic_var);
将导致如下结果:

call_function(\&some_function, $magic_var)
如果未定义
some_函数
,我可以使用
AUTOLOAD
sub来捕获调用,但是当它被定义时,我不知道有什么方法可以拦截调用(没有一些疯狂的事情,比如在调用方的所有sub周围注入包装器,或者暂时取消定义所有sub)

另一种说法是我想写
使用重载sin=>\&my\u sin
但是让
sin
成为任意函数,并让它在函数调用中使用重载对象时调用
nomethod
like sub

编辑:

根据大众的要求,我之所以研究这个问题,是因为我正在开发Perl6的Perl5版本。然而,在深入研究Perl6实现之后,它似乎也不处理在
上被调用的函数,因此我似乎不必尝试处理函数调用(仅处理操作符和方法调用)

如果有人感兴趣,模块将在CPAN上启动:


欢迎反馈/评论。

您可以使用该机制吗?

mmmm,源过滤器?:)更严重的是,有什么原因不能找到他们最终将在函数中的$magic_var`done上使用的运算符并重载它?@tchrist=>我以前也使用过源代码过滤器,这不太好。现在,这就是我的对象的行为方式(它们将被传递到子对象中,然后绑定到在它们上使用的第一个操作符)。但是我希望能够更早地捕获调用,既可以增加操作的惰性,也可以处理边缘情况,例如子T值,然后将其发送到多个运算符路径。此外,如果有某种方法捕获内置函数的应用程序,这将是理想的(当前捕获类型转换的方法(
“”+0 bool
等)在函数调用后最终失去重载).Context拜托!你为什么要这样做?你的最终意图是什么?你问的问题的答案是直接否定的。但是,如果你稍微后退一步,解释一下你真正想要实现的目标,你很可能会得到不同的答案。