use strict;
use warnings;
use feature 'say';
package Foo {
sub new { my $pkg = shift; return bless {}, $pkg }
sub frob { my $self = shift; $self-> foo( \&cb ) }
sub blurt { my $self = shift; $self-> foo( 'cb' ) }
sub foo { my ( $self, $cb ) = @_; $self-> $cb }
sub cb { my $self = shift; say ref $self, ' ', __PACKAGE__ }
};
package Bar {
our @ISA = ( 'Foo' );
sub cb { my $self = shift; say ref $self, ' ', __PACKAGE__ }
};
my $foo = Foo-> new;
my $bar = Bar-> new;
$foo-> frob;
$bar-> frob;
$foo-> blurt;
$bar-> blurt;
####
Foo Foo
Bar Foo
Foo Foo
Bar Bar
####
sub setObjNum
{
my $self = shift;
my $objnode = shift;
my $objnum = shift;
my $gennum = shift;
$self->traverse(0, $objnode, \&_setObjNumCB, [$objnum, $gennum]);
return;
}
####
$self->$func($objnode, $funcdata);