in reply to Re: search multiple lists
in thread search multiple lists

Thank you. It took me a while to get it going and not all of your suggestions worked but this is how the relevant part of my code looks like now.
@tect1=(1,5,6,8,16,20); @tect2=(1,7,10,12,13,14,15,18,19,22,23,24,46); @tect3=(1,2,3,9,10,11,17,21,24,39,46); @tectlist=(\@tect1, \@tect2, \@tect3); $variable=19; #as an example for $i (0..$#tectlist) { if (grep (/$variable/, @{$tectlist[$i]})){ print" List"; $listnumber=$i+1; print" $listnumber"; print " contains $variable.\n"; } }

Replies are listed 'Best First'.
Re^3: search multiple lists
by Eimi Metamorphoumai (Deacon) on Mar 04, 2005 at 13:35 UTC
    A few comments. One thing is any time you see a few variables whose names end in numbers, especially small sequential numbers (@tect1, @tect2, @tect3) you're usually better off seeing if you can't make them into an array. Nine times out of ten, you end up wanting to treat them that way anyway. So in this case you could make an array of arrays in the first place.

    The other problem I see is your grep. You're using the number you're looking for as a regexp. That works sometimes, but if you look for, say /1/ the list (7,10,12) it'll be found (because the string "10" contains the string "1"). So here's how I would have written this part.

    @tectlist = ( [1,5,6,8,16,20], [1,7,10,12,13,14,15,18,19,22,23,24,46], [1,2,3,9,10,11,17,21,24,39,46], ); $variable=19; for my $i (0..$#tectlist) { if (grep {$_ == $variable} @{$tectlist[$i]}){ my $listnumber = $i+1; print "List $listnumber contains $variable.\n"; } }
      Very good points, Eimi Metamorphoumai! I didn't think of the potential grep problem when posting my reply...
      _______
      Code is untested unless explicitly stated
      mlh2003