Perl 如何判断对象是否具有特定的重载方法?

Perl 如何判断对象是否具有特定的重载方法?,perl,Perl,我想检查一个对象在perl中是否有一个特定的重载方法-例如,如果它有一个子去引用重载,它的定义如下: use overload '&{}' => \&_some_sub; sub some_sub {...} 如果我转储创建相关对象的包的符号表,我会看到以下内容: [ "new", "import", "((", "(&{}", "ISA&quo

我想检查一个对象在perl中是否有一个特定的重载方法-例如,如果它有一个子去引用重载,它的定义如下:

use overload
    '&{}' => \&_some_sub;

sub some_sub {...}
如果我转储创建相关对象的包的符号表,我会看到以下内容:

[
  "new",
  "import",
  "((",
  "(&{}",
  "ISA",
  "__ANON__",
  "BEGIN",
]

在符号表中查找
(&{}
总是意味着存在子排序方法吗?它是否也适用于其他重载(我看到
(“
如果我重载字符串化).

关于
过载
如何在引擎盖下工作的详细信息没有很好的记录,本节的第一行是以下内容可能会发生变化的RSN。因此,您不能依赖于检查符号表

但是,模块会检查对象的运算符是否重载:

重载::方法(obj,op)

返回
undef
或对实现
op
的方法的引用

所以你可以用

if(重载::方法($someobj,&{}')){
#超负荷子指令
}

回退是否重要?例如,如果对象重载了
0+
并启用了回退,那么即使没有显式重载
+
-
等,也会自动允许大多数数字运算符工作。