Exercices Perl
Transcription
Exercices Perl
Exercices Perl Master de Bioinformatique Université de Rouen 1 Exercice Écrire un programme Perl qui affiche les lignes de plus de 80 caractères lues sur l’entrée standard. 2 Exercice Écrire un programme Perl qui affiche le second champ de chaque ligne. 3 Exercice Écrire un programme Perl qui permet d’enregistrer dans un fichier output.txt les lignes qui contiennent le mot (( print )). 4 Exercice À l’aide des tableaux associatifs, écrire un programme Perl qui affiche la fréquence des mots d’un texte. 5 Exercice Écrire un programme Perl qui lit des nombres, et qui pour chacun d’entre eux indique s’il est pair ou impair. À l’issue de la saisie (Ctrl-d sous Unix ou Ctrl-z sous Windows) le programme affiche la moyenne des nombres entrés. 6 Exercice Écrire un programme Perl qui constituer une liste de mots entrés au clavier l’un après l’autre puis qui trie la liste ainsi constituée par ordre croissant puis par ordre décroissant. 1 7 Exercice Écrire un programme Perl qui utilise un tableau associatif pour gérer un stock de bouteilles de vin. Le nom d’un vin est utilisé comme clef, une valeur saisie au clavier vient en + ou − de l’éventuelle valeur déjà existante. 8 Exercice Écrire un programme Perl qui vérifie que des mots saisis peuvent correspondre à une immatriculation de véhicule en france. On vérifie donc que le mot saisi commence par un chiffre compris entre 1 et 9 éventuellement suivi de 4 chiffres, suivi d’une, deux ou trois lettres, suivi : – du chiffre 0 suivi d’un chiffre ; – d’un chiffre suivi d’un chiffre ; – de 2a ou 2b. 9 Exercice Écrire un programme Perl qui calcul des expressions arithmétiques simples (non parenthésées) saisies à la volée. Le mot saisi doit commencer par un nombre suivi d’un opérateur arithmétique suivi d’un nombre (n fois). On utilise la fonction eval(expr) pour faire le calcul. 10 Exercice Écrire un programme Perl qui vérifie que des nombres entrés au clavier sont bien des entiers relatifs ou des réels. 11 Exercice Écrire un programme Perl qui saisit un texte à la volée. Lorsque la saisie est terminée, le programme calcule le nombre de lignes, de mots et de caractères du texte. 12 Exercice On reprend ici l’exercice 7 mais à la fin de la saisie on appelle une fonction qui va calcul la valeur du stock. Elle reçoit en paramètre le tableau associatif du stock, et un tableau associatif donnant le prix H.T. d’une bouteille de chaque vin et le taux de TVA. 2 13 Exercice Écrire un programme Perl qui parcourir l’ensemble des fichiers réalisés pour les exercices précédents et qui rajoute un commentaire dans chacun d’entre eux. On choisit ici de remplacer la première ligne par elle même suivie d’un commentaire constant. 14 Exercice Écrivez un programme Perl qui réalise les choses suivantes : 1. Définissez un tableau de séquences d’oligonucléotides : @seq = ("tcgtgccca", "tgtt", "cccga", "ttcatcag", "ggcaag", "ctg", "ggtgtaccggtgatcac", "ccaccta", "cctgaattaat"); ou (pour éviter de mettre les apostrophes) @seq = qw( tcgtgcca tgtt cccga ttcatcag ggcaag ctg ggtgtaccgtgatcac ccaccta cctgaattaat ); 2. Répartissez les éléments du tableau @seq en trois tableaux : @small_seq contiendra les oligos ayant entre 0 et 5 bases (caractères), @medium_seq ceux ayant entre 6 et 10 bases, et @large_seq ceux ayant 11 bases et plus. 3. Affichez chacun des tableaux résultants. 4. Trouvez le plus long oligo dans @seq et affichez le. Indice : L’opérateur length retourne la longueur d’une chaı̂ne, l’opérateur push permet d’ajouter un élément à un tableau, et l’opérateur join est très utile pour afficher simplement (en une instruction) le contenu complet d’un tableau. 15 Exercice Supposons maintenant que votre programme Perl, à la place de définir un tableau de séquences d’oligonucléotides, les lise dans un fichier. Le format du fichier est très simple : un oligo par ligne. Ainsi, le fichier contenant le tableau de séquences de l’exercice 14 est : 3 tcgtgccca tgtt cccga ttcatcag ggcaag ctg ggtgtaccggtgatcac ccaccta cctgaattaat Modifiez votre programme pour qu’il soit capable de lire un nombre quelconque de séquences d’oligonucléotides dans un fichier et de faire la même analyse que dans l’exercice 14. 16 Exercice La table suivante spécifie la maladie associée à chaque gène : AD4 Alzheimer’s Disease BRCA1 Breast Cancer DMD Duchenne Muscular Dystrophy FMR1 Fragile X Syndrome GBA Gaucher Disease Écrivez un programme Perl qui demande à l’utilisateur d’entrer un nom de gène, et affiche la maladie correspondante. Le programme devra afficher un message d’erreur si le gène entré n’est pas trouvé dans la table. Remarque : pour définir le tableau représentant la table, vous pouvez utiliser les deux syntaxes suivantes. %genes = ("AD4", "Alzeimer’s Disease", "BRCA1", "Breast Cancer", "DMD", "Duchenne Muscular Dystrophy", "FMR1", "Fragile X Syndrome", "GBA", "Gancher Disease"); ou %genes = ( AD4 => "Alzeimer’s Disease", BRCA1 => "Breast Cancer", DMD => "Duchenne Muscular Dystrophy", FMR1 => "Fragile X Syndrome", GBA => "Gancher Disease" ); 17 Exercice Considérez un fichier contenant un texte quelconque. Écrivez un script Perl qui recopie ce fichier de sorte que chaque ligne soit précédée de son numéro. 4 18 Exercice Écrivez un programme Perl qui prend en entrée une séquence cDNA, valide qu’elle contient bien uniquement les nucléotides A, T, G et C, et affiche à l’écran la séquence mRNA correspondante (remplacez tous les T par des U). Remarque : proposez deux solutions différentes pour les substitutions de T en U, une avec l’opérateur s/// et une avec l’opérateur tr///. 19 Exercice Réalisez un programme Perl lisant un fichier contenant une séquence au format FASTA et comptant les occurences d’un motif exact dans cette séquence. Exemple : si on recherche le motif ”AT” dans la séquence ATGTAGCATAA, on obtient : AT : 2 Indices : – Le motif et le nom du fichier FASTA seront spécifiés à l’intérieur du programme. – Utilisez la fonction substr. 20 Exercice 1. Réalisez un programme Perl lisant un fichier contenant une séquence au format FASTA et comptant les occurences d’un motif inexact (ou expression régulière) dans cette séquence. Exemple : si on recherche l’expression régulière (( A. ))dans la séquence ATGTAAGCATAA, on obtient : AT : 2 AG : 1 AA : 2 Indice : utilisez les opérateurs =~ et // avec l’option g (pour global). 2. L’opérateur //g a pour inconvénient de ne pas tenir compte des occurences chevauchantes d’un motif (par exemple, le motif AGA intervient deux fois dans AGAGA mais n’est vu qu’une fois). À l’aide d’une boucle while avançant sur la séquence en fonction de la présence de l’expression régulière, modifiez le programme précédent pour compter TOUTES les occurences d’une expression régulière. Remarque : cette deuxième méthode est beaucoup plus lente à l’exécution que la première, mais les deux méthodes ne donnent pas le même résultat ! Donc, tout dépend du contexte... Vous pouvez comparer les temps d’exécution des deux méthodes à l’aide de la commande unix time. 5 21 Exercice Écrire un programme Perl qui lit un fichier et écrit ses lignes dans l’ordre inverse (de la dernière à la première). 22 Exercice Écrire un programme Perl qui étant donnée une séquence de nucléotides effectue la traduction dans les six phases de lectures. 6