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

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.

Replies are listed 'Best First'.
Re^5: Subroutines not working right
by thundergnat (Deacon) on Feb 22, 2008 at 01:40 UTC

    ...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 ); } }