http://qs321.pair.com?node_id=465033


in reply to I'm in trouble with Perl's OO programming

Inheritance does not work when you access WatchLog and SendEmail as subroutines. In fact for the sake of symmetry I would use a method invokation for AddLocalTime or at least change the name to _AddLocalTime to indicate that it is a local class method intended for use within the class.

use base A .... sub Schedule { my ($self) = @_; $self->addTab(_AddLocalTime); $self->addTab($self->WatchLog); $self->addTab($self->SendEmail); } sub _AddLocalTime { }

Replies are listed 'Best First'.
Re^2: I'm in trouble with Perl's OO programming
by chromatic (Archbishop) on Jun 09, 2005 at 17:32 UTC

    That will actually call the methods at the point of definition, not in the loop. I think you meant instead:

    $self->addTab( sub { $self->WatchLog() } );

    Another option is to provide the name of methods to call:

    $self->addTab( 'WatchLog' );

    and then call them with:

    $self->$code()

    That's really late binding and it can be useful.

      You are right! I thoroughly misunderstood the OP.