この場合、 UNIVERSAL::isa は機能しないことに注意してください。私は継承ツリーをたどりたくありません__PACKAGE__->isa('UNIVERSAL')
。
次に例を示します。
use 5.10.1;
use strict;
use warnings;
use utf8;
{
package Parent;
#How to do this more elegantly?
sub inherits_from_parent {
no strict 'refs';
return (__PACKAGE__ eq @{"$_[0]\::ISA"}[0]);
}
}
{
package Child;
use parent -norequire, qw(Parent);
}
package main;
say "Child directly inherits from Parent"
if Child->inherits_from_parent;
#not wat I want
say 'Child is universal:'.Child->isa('UNIVERSAL');
no strict 'refs';
クラスの直接の親を検出するためのより良い方法 (を使用せずに) はありますか?
ありがとう。