Voilà, j'ai une fonction DICE qui découpe une longue chaine en plus petite chaine ( chaine de 19 caractères) puis j'applique à ces petites chaînes différents traitements ( par exemple, la fonction pourcentage_GC qui calcule le %GC de chaque séquence)

Voici mon code ( j'espère qu'il n'est pas trop long!)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
 
#!/usr/bin/perl 
 
use Getopt::Long; 
 
my @sequence; my @table; my @table;
my $GC; my $fichier; my $sequence;
my $longueur_ARNm; my $boucle=0; my $lim;
# Declaration des variables utilisees pour le calcul des scores
my $score_GC; my $pourcentage_GC;
my $l; my $c; # pour l'affichages des résultats 
my @resultat;
my $lg_siRNA=13; # pour le calcul de la TM
 
#######################################################################################
# Fonction Getopt lit les options passées en ligne de commande (avec des raccourcis de commande)
Getopt::Long::GetOptions('G=s' => \$GC);
 
# Calcul du pourcentage de GC 
 
sub pourcentage_GC
 
	{	
my ($sequence)=@_;
my $total_pb;
my $pourcentage_GC;
my $A=0; my $G=0; my $C=0; my $U=0;
 
while ($sequence =~ /A/gi) { $A =$A+1; }
while ($sequence =~ /G/gi) { $G =$G+1; }
while ($sequence =~ /U/gi) { $U =$U+1; }
while ($sequence =~ /C/gi) { $C =$C+1; }
 
print "C $C\t G $G\t A $A\t U $U\n";
 
$total_pb = $C+$G+$A+$U;
print "$total_pb\n";
$pourcentage_GC=($C+ $G)/ $total_pb *100;
$pourcentage_GC = int ( $pourcentage_GC);
print "\n$pourcentage_GC%\n";
return ($pourcentage_GC);
	}
 
sub DICE
{
my ($sequence) =@_;
my $boucle=0; 
my $LENGTH=19;
my $longueur=length($sequence);
my $lim= $longueur-$LENGTH+1;
my @table;
 
while ($boucle< $lim)
	{
$table[$boucle]=substr ($sequence, $boucle, $LENGTH);
print "$table[$boucle]\n";
$boucle ++;	
	}
return @table;
}
 
print "Chemin du fichier a traiter : "; 
chomp ($fichier = <STDIN>); 
open (FIC , "$fichier") || die "Probleme d'ouverture: $!"; 
while ($seq = <FIC>) 
{ chomp $seq; 
$sequence=$sequence.$seq; } 
close FIC; 
DICE ($sequence);
 
$longueur=length($sequence);
$lim= $longueur-$LENGTH+1;
 
$boucle =0;
while ($boucle< $lim)
	{
#appel de la fonction
($table[$boucle])=  uc ($table[$boucle]); 
$table[$boucle]=~tr/T/U/; 
 
if ($GC!=0) { ($score_GC) = pourcentage_GC($table[$boucle]); } 
else { $score_GC = 0; }
 
$boucle++;		
	}
et le pbl est que j'ai tjrs le même message d'erreur qui est :
Illegal division by zero at ./Khvorova_reuni.pl line 37
la ligne 37 correspond à :
$pourcentage_GC=($C+ $G)/ $total_pb *100;
et en fait ca ne calcule pas le % en GC car ca na compte même pas les A les G les C et les T.

Dc je pense qu'il y a un pbl de "transmission" de ma séquence ( de paramètre) lorsqu'elle aété traitée par la fonction DICE ( car si je supprime la fonction DICE, la fonction calcul de % en GC marche très bien)

Au fait je suis sous mac os 10 et pour executer le programme il faut faire :
./Khvorova_reuni.pl -G 1
car j'utilise la fonction GetOption

j'ai vraiment besoin d'aide!!!!

merci