in reply to Re^2: Subroutines not working right
in thread Subroutines not working right

I use Tk on windows. You may prefer it to Win32::GUI. Plus it runs pretty much anywhere.

Replies are listed 'Best First'.
Re^4: Subroutines not working right
by stringplayer92 (Initiate) on Feb 22, 2008 at 00:08 UTC
    I realized the error of my ways. Thanks only 80 more lines of code to right...

    Stringplayer92

    Windows is a 32 bit patch to a 16 bit GUI based on an 8 bit
    operating system, written for a 4 bit processor by a 2 bit
    company which cannot stand 1 bit of competition.

      ...Thanks only 80 more lines of code to right...

      Arrgh. A classic example of why you should avoid cut and paste programming. It shouldn't be too hard to refactor all of those button calls out into one call with passed parameters. You would probably need to use a closure to get the right return values. Umm... Something like this:

      (I'm working in Linux and can't use Win32::GUI stuff, so I did it with Tk, but it should give you a good hint.)

      use warnings; use strict; use Tk; my $font = "{Times New Roman} 32"; my @chosen; my $grid_width = 10; my $mw = MainWindow->new( -title => 'Keno', ); my $header_frame = $mw->Frame( -relief => 'raised', -border => 3 )->grid( -row => 0, -column => 0, -columnspan => $grid_width, -sticky => 'ew' ); $header_frame->Label( -text => 'Welcome to Keno', -font => "{Comic Sans MS} 24 bold", )->pack; my ( $row, $column ); for ( 0 .. 79 ) { $column = $_ % $grid_width; $row++ unless $column; $mw->Button( -width => 2, -font => $font, -text => $_ + 1, -command => [ sub { Button_Click( $_[0] ) }, $_ + 1 ] )->grid( -row => $row, -column => $column, ); } MainLoop; sub Button_Click { my $arg = shift; if ( defined $chosen[9] ) { print 'You already chose 10 numbers: '; print join ', ', @chosen; print "\n"; } else { print "$arg was choosen\n"; push( @chosen, $arg ); } }