我在第 12 章阅读编程 perl,对象,有以下文档:
next::method 也有类似的问题,因为它使用调用者的包来确定要查看的类。如果你在 Donkey 中从另一个包中定义一个方法, next::method 将中断:
package main;
*Donkey::sound = sub { (shift)–>next::method(@_) };
匿名子例程在堆栈中显示为 _ ANON _,因此 next::method 不知道它在哪个包中。不过,您可以使用 Sub::Name CPAN 模块来解决它:
use Sub::Name qw(subname);
*Donkey::sound = subname 'Donkey::sound' => sub { (shift)–>next::method(@_) };
我很好奇 Sub::Name 模块是如何完成这项工作的?让匿名子程序的调用者不是 __ANON__
非常感谢您的帮助:)