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!)
et le pbl est que j'ai tjrs le même message d'erreur qui est :
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++; }la ligne 37 correspond à :Illegal division by zero at ./Khvorova_reuni.pl line 37
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.$pourcentage_GC=($C+ $G)/ $total_pb *100;
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 :car j'utilise la fonction GetOption./Khvorova_reuni.pl -G 1
j'ai vraiment besoin d'aide!!!!
merci
Partager