in reply to Perl/Tk - values appearing in the wrong place!

What do $state->{pullType} and $state->{pullDs} contain? Are you using strict?

Most likely, the two hash entries contain the same thing (probably an inital desired state string), and you're not using strict. The -variable option expects a reference, and you're passing it (presumably) a simple scalar. If you're not using strict, this will get treated as a symbolic reference. If it's a valid symbolic reference (and an empty string is a valid reference), you're basically giving the two BrowseEntry's the same state variable, so changes in one are going to be reflected in the other automatically.

To illustrate, try this example code:

#!/usr/bin/winperl use Tk; use Tk::BrowseEntry; $state = { one => '', two => '', three => '', four => '', }; $mw = MainWindow->new(); $mw->BrowseEntry( -label => 'List One', -choices => [qw(foo bar)], -variable => $state->{one}, )->grid(-padx => 5, -pady => 5); $mw->BrowseEntry( -label => 'List Two', -choices => [qw(baz quux)], -variable => $state->{two}, )->grid(-padx => 5, -pady => 5); # versus $mw->BrowseEntry( -label => 'List Three', -choices => [qw(foo bar)], -variable => \$state->{three}, )->grid(-padx => 5, -pady => 5, -column => 2, -row => 0); $mw->BrowseEntry( -label => 'List Four', -choices => [qw(baz quux)], -variable => \$state->{four}, )->grid(-padx => 5, -pady => 5, -column => 2, -row => 1); MainLoop;

bbfu
Black flowers blossom
Fearless on my breath

Replies are listed 'Best First'.
Re: Re: Perl/Tk - values appearing in the wrong place!
by bobn (Chaplain) on Aug 06, 2003 at 23:47 UTC

    I ++'d you because I think you've got the answer.

    Interestingly enough, though, use strict does not save you from this one. I added use strict, put a my in front of the initializations of $state and $mw, and the code acts the same.

    --Bob Niederman, http://bob-n.com

      Huh, you're right. Odd. I guess Tk's not respecting strict 'refs' like it should. I'd say that's probably a bug somewhere in the (compiled) bindings. *shrug*

      Anyway, did you add the \ to enreference the hash element, as demonstrated in the second two BrowseEntry examples? That should solve the problem, at least.

      bbfu
      Black flowers blossom
      Fearless on my breath

        Yes! and it worked, that was the problem. Too tired to notice when I was working at it earlier in the day.

        Thanks for the comments.

        ...john