#!/usr/bin/perl -w

# Programme comptant les occurences d'une expression reguliere
# dans un fichier de sequences au format Fasta
# Le programme utilise l'operateur =~ 
# Il ne peut donc rechercher les expressions chevauchantes


open(F, "p53_seq.txt");

$regexp = "A.";  #mettre ce qu'on veut

#lecture de l'ensemble des sequences

$line = <F>;
while ($line) {

    #si la ligne commence par ">", on est au debut d'une sequence
    if ($line =~ /^>/) {  
	$name = $line;
	$seq = "";  #reinitialise la variable stockant la sequence

	#tant que l'on n'arrive pas a la sequence suivante: lire
	while (($line = <F>) && ($line !~ /^>/)) {
	    chomp $line;
	    $line =~ tr/\s//d;  # enleve les blancs
	    $seq .=  $line;   #pareil que: $seq = $seq . $line
	}

	#stocke dans @hits toutes les occurences de l'expression
	@hits = ($seq =~ /$regexp/gi );

	#pour chaque occurence: remplit le tableau associatif des resultats
	foreach $h (@hits) {
	    $occur{$h}++ ; 
	}

    } else {
	$line = <F>;
    }
}

close F;

#affichage des resultats    
while( ( $key , $count ) = each %occur ){
    print "$key: $count\n";
}
