Right, I better set $GetLocation = -1, but, what I am looking for is if there is something working like grep does ?
@elemLoc = grepIndex (/pattern/, @list); # something like that ? And is that I can't aviod to use loop to search for matching ? Rgds, Connie ----- Original Message ----- From: "Jeff 'japhy' Pinyan" <[EMAIL PROTECTED]> To: "Connie Chan" <[EMAIL PROTECTED]> Cc: <[EMAIL PROTECTED]> Sent: Saturday, July 13, 2002 4:54 AM Subject: Re: How can I get element location in array ? > On Jul 13, Connie Chan said: > > >I now have an array like this : @list = ('1234', '4567', '789A', 'BCDE', > >'FGHI', .....); > > > >and now, I want to find where is the location of 'BCDE' in list , so I > >write like this : > > > >my @list = ('1234', '4567', '789A', 'BCDE', 'FGHI'); > >my $GetLocation = 0; > >my $value = 'BCDE'; > > > >for (my $atLoc = 0; $atLoc <= $#list and ! $GetLocation ; $atLoc++) > >{ $GetLocation = $atLoc if ($value eq $list[$atLoc]) } > > > >ok, so $GetLocation is the result I want... > >but any other smarter method ? > > Once you have FOUND the element, you can exit the loop. Also, your loop > is testing !$GetLocation, which returns true if the element is found at > index 0. Your code will end up ASSUMING the element is index 0 if it > isn't found in the array at all. Here's are two solutions: > > my @list = ...; > my $wanted = 'foo'; > my $pos = -1; # -1 means not found > > for (my $i = 0; $i < @list; $i++) { > $pos = $i, last if $list[$i] eq $wanted; > } > > Now you'll have $pos being either -1 (not found) or the index in the > array. You'd check via > > if ($pos != -1) { ... } # it was found > else { ... } # it wasn't found > > Here's the other solution: > > my @list = ...; > my $wanted = 'foo'; > my $pos = 0; # 0 means not found > > for (my $i = "0E0"; $i < @list; $i++) { > $pos = $i, last if $list[$i] eq $wanted; > } > > Now you'll have $pos being either 0 (not found), or the index in the > array, BUT! it will be "0E0" if it was the first element. This means you > CAN test it like so: > > if ($pos) { ... } # it was found > else { ... } # it wasn't found > > because "0E0" is a string that is not false, but is treated as the number > 0 when used numerically. > > -- > 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] > > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]