in reply to Re: perlref repeats last of array
in thread perlref repeats last of array

I tried exactly that and I got reference errors. It's very confusing, but the code I posted works fine with 'use strict'. Here is the complete code so far. You are the second person to tell me that it won't work under use strict, but it does here.
#!/usr/bin/perl -w use strict; use Tk; use diagnostics; # Just for testing my $wintitle = 'TkSysinfo'; my %choices = ( 'fs_sub' => 'File Systems', 'mem_sub' => 'Memory' ); my $mw = MainWindow->new; $mw->title("$wintitle"); $mw->minsize(600, 400); $mw->configure(-background => '#AAAAAA'); my $menus = $mw->Frame(-relief => 'groove', -borderwidth => 3, -background => '#EEEEEE' )->pack(-side => 'top', -fill => 'x'); my $choice_menu = $menus->Menubutton(-text => 'Choose Info', -background => '#EEEEEE', -activebackground => '#EEEEEE', -foreground => '#000000', )->pack(-side => 'left'); foreach (keys(%choices)) { $choice_menu->command(-label => $choices{$_}, -activebackground => '#CCCCCC', -command => \&$_); } # EXIT $choice_menu->separator; $choice_menu->command(-label => 'Exit', -activebackground => '#CCCCCC', -command => sub{$mw->destroy}); # Define updates to main window sub fs_sub{}; sub mem_sub{}; MainLoop;

Kickstart

Replies are listed 'Best First'.
Re: Re: Re: perlref repeats last of array
by demerphq (Chancellor) on Nov 26, 2001 at 12:47 UTC
    Well, regarding our converstaion in chat about the gratuitious use of symrefs and a better way. The simplest solution is to reverse your hash:
    my %choices = ( 'File Systems' => \&fs_sub, 'Memory' => \&mem_sub ); foreach (keys(%choices)) { $choice_menu->command(-label => $_, -activebackground => '#CCCCCC', -command => %choices{$_}); }
    Now its easy to see what you are doing (providing a disptach table) and its no less code or stress.

    HTH

    Yves / DeMerphq
    --
    Have you registered your Name Space?