Как заметил Эрик, вы можете обычно использовать UNIVERSAL::can
Может использоваться как на объекте, как в вашем примере ($obj->can($methodName)
), так и статически, на классе: (CLASS->can($methodName)
)
Обратите внимание, что возможны ложные отрицания, связанные с использованием UNIVERSAL::can
для объектов / классов, которые имеют методы AUTOLOAD-ed - подробности см. В perldoc . Поэтому перед использованием can()
для объекта / класса, пожалуйста, убедитесь, что рассматриваемый класс либо не использует AUTOLOAD, либо переопределяет can()
для компенсации, либо использует прямое объявление для компенсации, как описано в can()
s perldoc - подсказка Брайану Дой Фой)
Кроме того, будьте осторожны, чтобы либо ТОЛЬКО вызывать can()
на реальных объектах, либо инкапсулировать его в eval. Он умрет, если вызывается для необъекта (например, undef, скаляр и т. Д.)