Code to do what you are looking for is inserted into the loop below, with
comments at the end.
At 10:02 PM 6/8/01 +0000, scott lutz wrote:
>I have a question that to me seems like it would be part of the foundation
>of Perl.
>
>@possible_matches = qw( list of items to match against );
>
>
>@list = qw( imagine that there is an unknown
> number of elements in here );
>
>foreach $list (@list) {
> # now match againt each value in @possible_matches, one-by-one,
foreach my $item (@possible_matches) {
if($list eq $item){
# Do whatever you like, here, print it, store it, etc.
}
}
>}
As far as it being in part of the "fundamentals," the best thing I can
suggest is that you consider using hashes. When you want to know if
something is "in" a list, hashes leap naturally to mind.
First you make the elements of your arrays above into keys of a hash. The
values don't matter. If you don't also need them in arrays for some other
purpose, you might do this directly with something like:
my %possible_matches;
@possible_matches{qw( list of items to match against )}=();
# This actually efficiently assigns to the hash with something called slicing.
# You'll find it in the standard books, including the llama on about page 73.
# (I don't have it here now.)
# The values, which you don't care about, will all be undef.
my %list;
@list{qw(item whatever baz bar)} = ();
Now to get the same thing as above, you can ask more directly like this:
foreach my $item (keys %possible_matches){
if(exists $list{$item}){
# do whatever
}
}
or more succinctly:
my @matches = grep {exists $list{$_}} keys %possible_matches;
Enjoy!
Cheers,
Jeff