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

Thanks for the tip,
I actually realized that right before seeing your reply...
I will look into using a reference to the function
Windows programming is so annoying....

Stringplayer92

Replies are listed 'Best First'.
Re^3: Subroutines not working right
by ikegami (Patriarch) on Feb 22, 2008 at 00:02 UTC
    I notice you had an argument. If you need a "reference with arguments", create a small anon routine
    $func = \&foo; -vs- $func = sub { foo(1) };
Re^3: Subroutines not working right
by Joost (Canon) on Feb 22, 2008 at 00:00 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 ); } }