If no selection is made $lst->curselection is undefined. Adding:
return if ! defined $lst->curselection;
as the first line of sample will avoid the problem. However I strongly recommend that you refactor your code to completely avoid global variables. Consider:
#!/usr/bin/perl -w use warnings; use strict; use Tk; main(); sub main { my @lst_files = (0 ... 10); my $file; my $mw = new MainWindow; my $frm1 = $mw->Frame(-bg => 'LightSkyBlue1')->pack(-fill => 'x') +; my $frm11 = $frm1->Frame(-bg => 'LightSkyBlue1')->pack(-fill => 'x +'); my $lst = $frm11->Scrolled( 'Listbox', -width => 50, -height => 5, -scrollbars => 'oe', -selectmode => 'single' )->pack(-side => 'bottom'); $frm1->Button( -width => 15, -text => "fill", -command => sub {fill_boxes($lst, \@lst_files, @_)} )->pack(-side => 'top'); $frm1->Button( -width => 15, -text => "print", -command => sub {sample($lst, @_)} )->pack(-side => 'top'); MainLoop; } sub fill_boxes { my ($lst, $lst_files) = @_; $lst->delete('0.0', 'end'); $lst->insert('end', @$lst_files); } sub sample { my ($lst) = @_; return if ! defined $lst->curselection; if ($lst->curselection ne '') { #Extract Application File Selection my $file = $lst->get($lst->curselection); print "$file\n"; } # and then more happens }
You can achieve similar results using OO techniques, but the important part is to ensure you pass the correct variables through to your callback routines.
In reply to Re: Can't call method "curselection" on an undefined value
by GrandFather
in thread Can't call method "curselection" on an undefined value
by Araviz
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |