in reply to Tk module subs executes without invocation

-command=>[\&_save_defaults($self)]],

I've never had any success in pre-binding a variable like this. Try:

-command=>[ sub { $self->_save_defaults() } ]],
instead.

Replies are listed 'Best First'.
Re^2: Tk module subs executes without invocation
by dannoura (Pilgrim) on Aug 29, 2005 at 15:45 UTC

    Magic. Thanks! That works. Can you explain why?

    Also, another question: now that I ported all the subs from the script into a module the script reports:

    Assuming require 'Tk::BrowseEntry' at FP_GUI.pm line 151; Assuming require 'Tk::ProgressBar' at FP_GUI.pm line 169;
    Also something which it hasn't done before (this is despite a use Tk; statement at the beginning of the module and script). Why is that?

      You can only take a reference to a subroutine of some sort in perl5 (perl6 will have more sophisticated binding to allow you to pre-populate certain parameters and pass that code ref around instead of the original routine). So here what I'm doing is creating an anonymous sub that is also a closure - it's closed on $self, retaining the current value of $self at the time of this routine. It then calls the routine we want with the parameters we want - even though the Tk code can't know what $self is to pass it in.

      As to your assuming lines - I'm not sure, I'm not a Tk user. ;-)