most of the time, a simple hash is enough; but it is usually wrapped up in methods to make the hash private to the window object. and of course, those methods are duplicated in all modules, under a form or another...
since duplication is bad, i just released Tk::Role::HasWidgets which is a moose role, and provides with a convenient way to store & retrieve your widgets:
use Moose; with 'Tk::Role::HasWidgets'; # when creating a widget $self->_set_w( 'my_button', $button ); # later on, in one of the methods $self->_w( 'my_button' )->configure( ... );
the methods featured in this role begin with "_", that is, they are following perl convention of private methods. this is on purpose: remember that this module is a role, consumed by your class. and you don't want those methods to be available outside of the window class, do you?