vladmaster99 has asked for the wisdom of the Perl Monks concerning the following question:

Here is some of my first TKX code what am I doing wrong. I would rather not rewrite the table into marked up text. Table looks so close to working the way I would like it to. This is not the actual program I am writing it is just a smaller bit of code that has the exact same error message and same line on which the error is occuring
#use strict; use warnings; use Tkx; Tkx::package_require("Tktable"); my $mw = Tkx::widget->new("."); %hash = ( # data to display '0,0' => 'Goodby', '1,1' => 'cruel', '2,2' => 'world', ); %hash2 = ( # data to display '0,0' => 'Goodby', '1,1' => 'cruel', '2,2' => 'world', ); my $t = $mw->new_table ( -rows => 5, -cols => 3, -cache => 1, -variable => \%hash, ); $t->g_pack(-fill => 'both', -expand => 1); $b=$mw->new_button (-text=>"Search", -command=>sub {Search()}, ); $b->g_pack(); $b2=$mw->new_button (-text=>"Text", -command=>sub {Text()}, ); $b2->g_pack(); sub Search() {print("You rang?\n"); %hash = ( # data to display '0,0' => 'Hello', '1,1' => 'Great', '2,2' => 'world', ); }; sub Text() {print("Yes Master?\n"); %hash2 = ( # data to display '0,0' => 'Hello', '1,1' => 'Great', '2,2' => 'world', ); }; Tkx::MainLoop(); use Data::Dump; dd \%hash; use Data::Dump; dd \%hash2;
fails when search button pressed But works for text button. and hash is diffent from hash2 what is Tkx and tie doing?? Console output
D:\DATA\HOME\Perl>TableTest.pl Yes Master? You rang? { # tied Tcl::Var active => "", } { "0,0" => "Hello", "1,1" => "Great", "2,2" => "world" } D:\DATA\HOME\Perl>TableTest.pl Yes Master? { # tied Tcl::Var "0,0" => "Goodby", "1,1" => "cruel", "2,2" => "world", "active" => "", } { "0,0" => "Hello", "1,1" => "Great", "2,2" => "world" } D:\DATA\HOME\Perl>
Cheers for any help.

Replies are listed 'Best First'.
Re: Tkx: Table Question
by vladmaster99 (Initiate) on Oct 25, 2011 at 04:05 UTC

    Well dear Monks I am perplexed the following code works with the "print Dumper(%hash);" included and fails with an "EXIST" error without line. Why???

    #use strict; use warnings; use Tkx; use Data::Dumper; Tkx::package_require("Tktable"); my $mw = Tkx::widget->new("."); %hash = ( # data to display '0,0' => 'Goodby', '1,1' => 'cruel', '2,2' => 'world', ); %hash2 = ( # data to display '0,0' => 'Goodby', '1,1' => 'cruel', '2,2' => 'world', ); my $t = $mw->new_table ( -rows => 5, -cols => 3, -cache => 1, -variable => \%hash, ); $t->g_pack(-fill => 'both', -expand => 1); $b=$mw->new_button (-text=>"Search", -command=>sub {Search()}, ); $b->g_pack(); $b2=$mw->new_button (-text=>"Text", -command=>sub {Text()}, ); $b2->g_pack(); sub Search() {print("You rang?\n"); %hash = ( # data to display '0,0' => 'Hello', '1,1' => 'Great', '2,2' => 'world', ); print Dumper(%hash); #only works with this line in code }; sub Text() {print("Yes Master?\n"); %hash2 = ( # data to display '0,0' => 'Hello', '1,1' => 'Great', '2,2' => 'world', ); print Dumper(%hash2); }; Tkx::MainLoop();
Re: Tkx: Table Question
by Anonymous Monk on Oct 25, 2011 at 10:42 UTC

    Adding an explicit return ; to sub Search will eliminate the error

    I'm not sure where the bug lies, but I think there are two, one in Tcl for Tcl::Var, and one in Tkx for using the return value and not documenting how

      Thanks this fixed my problem thanks for the prompt reply.cheers < class="pmsig">
      I have to start somewhere here is better than anywhere else