use warnings; use strict; { package Foo; use Data::Dump; use Scalar::Util qw/blessed/; sub new { return bless {}, shift } sub foo { my $self = shift if blessed($_[0]) && $_[0]->isa(__PACKAGE__); dd 'foo', $self, \@_; } sub bar { my $self = shift if defined blessed($_[0]) && $_[0]->isa(__PACKAGE__); dd 'bar', $self, \@_; } } { no strict 'refs'; @{"0::ISA"} = ('Foo') } my $x = bless {}, '0'; $x->foo(); # ("foo", undef, ["0=HASH(0x561239194f3e)"]) $x->bar(); # ("bar", "0=HASH(0x561239194f3e)", [])