On Aug 27, Timothy said:

>I am building an array of Tk button and each button will invoke the
>same subroutine. However I need the index of the calling button to
>be sent to the subroutine. So far I have a for loop and a SWITCH that
>that works but it seems to me to be pretty poor coding:
>
>  for ($intIndex=0; $intIndex<20; $intIndex++) {
>    SWITCH: {
>      if ($intIndex==0) { 
>$objButton=$objFrame->Button(-background=>$BG,-borderwidth=>'1',-command=>sub 
>{&FileBrowse($objWindow,"0")},height=>'1',-text=>'Browse')->pack(-side=>'top',-anchor=>'w');
> last SWITCH; }
>            --------------------
>            --- 1 to 18 here ---
>            --------------------
>      if ($intIndex==19) { 
>$objButton=$objFrame->Button(-background=>$BG,-borderwidth=>'1',-command=>sub 
>{&FileBrowse($objWindow,"19")},height=>'1',-text=>'Browse')->pack(-side=>'top',-anchor=>'w');
> last SWITCH; }
>    }
>    push @arrButton, $objButton;
>
>As you can see the only thing that is changing is the constant "1" to "19"
>in the subroutine parameters. I can't just use $intIndex as that is local
>to this subroutine. Anyone see a simple concise way round this? TIA:)

You CAN use $indIndex in the code reference, IF it's my() variable:

  for my $idx (0 .. 19) {
    $objFrame->Button(
      -background => $BG,
      -borderwidth => 1,
      -command => sub { FileBrowse($objWindow, $idx)} ,
      -height => 1,
      -text => 'Browse'
    )->pack(-side => 'top' , -anchor => 'w');
  }

-- 
Jeff "japhy" Pinyan      [EMAIL PROTECTED]      http://www.pobox.com/~japhy/
RPI Acacia brother #734   http://www.perlmonks.org/   http://www.cpan.org/
** Look for "Regular Expressions in Perl" published by Manning, in 2002 **
<stu> what does y/// stand for?  <tenderpuss> why, yansliterate of course.
[  I'm looking for programming work.  If you like my work, let me know.  ]


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to