#!/usr/bin/perl -w

# Programme comptant les occurences d'une expression reguliere
# dans un fichier de sequences au format Fasta
# Le programme verifie la presence de l'expression a chaque
# position de la sequence.
# Il peut donc trouver toutes les occurences d'une expression
# mais il est bcp plus lent que celui utilisant les exp. reg.


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
	}

	$lseq = length( $seq ) ; 

	#on avance d'1 position a la fois sur la sequence
	for ( $i = 0 ; $i < $lseq ; $i++){
	    #on ne regarde que le morceau de sequence qui commence a $i
	    $partseq = substr( $seq , $i ) ; 
	    #si $partseq commence par $regexp, alors on a un hit
	    if($partseq =~ /^$regexp/o ){
		$occur{$&}++ ; # $& est la chaine matchee par le =~
	    }
	}

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

close F;

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