in reply to How to find any of many motifs?

Ok, a more detailed hint:
1: read the motif file using Bio::SeqIO, and store those motif in a hash.
2: traverse through the target sequence file usingBio::SeqIO. On each target seq, use index on each motif to find whether the seq has the motif.
use strict; use Bio::SeqIO; my $file_seq = shift; my $file_motif = shift; # read all motif # store in hash: ID => motif_seq my %all_motif; my $MOTIF_FH = Bio::SeqIO->new(-file=>$file_motif); while (my $obj = $MOTIF_FH->next_seq) { $all_motif{$obj->display_id} = $obj->seq; } $MOTIF_FH->close; # traverse through all sequences my $SEQ_FH = Bio::SeqIO->new(-file=>$file_seq); while (my $obj = $SEQ_FH->next_seq) { my $id = $obj->display_id; my $seq = $obj->seq; print "Sequence: $id\n"; # traverse through all motifs foreach my $motif_id (sort keys %all_motif) { my @curr_result; # find all positions of current motif my $last_i = 0; while (1) { my $i = index($seq,$all_motif{$motif_id},$last_i); last if $i==-1; push @curr_result,$i+1; $last_i = $i; } # print if has result if (@curr_result>0) { print "\tmatch with $motif_id at: @curr_result\n"; } } } $SEQ_FH->close;