silico.biotoul.fr
 

Perl BioPerl recipes

From silico.biotoul.fr

(Difference between revisions)
Jump to: navigation, search
m
m (Quelques particularités)
Line 55: Line 55:
-
* < > correspond au fichier passé en paramètre au script.
+
* <tt>&lt; ></tt> correspond au fichier passé en paramètre au script.
Exemple : lancement du script suivant avec la commande: <tt>sh> perl le_script.pl un_fichier_texte.txt</tt>
Exemple : lancement du script suivant avec la commande: <tt>sh> perl le_script.pl un_fichier_texte.txt</tt>
 +
<source lang='perl'>
 +
#!/usr/bin/perl
 +
 +
while (< >) {
 +
  chomp;
 +
  print $. . $_;
 +
}
 +
</source>
 +
 +
Commentaires : la boucle <tt>while</tt> itère sur chaque ligne du fichier. La fonction <tt>chomp</tt> supprime le caractère de fin de ligne (ici, le fait de l'appeler sans paramètre l'applique à la variable par défaut <tt>$_</tt> qui est une ligne du fichier texte). La variable spéciale <tt>$.</tt> correspond au numéro de ligne du fichier. Le '.' qui suit correspond à la concaténation de chaînes de caractères.
 +
 +
= Manipulation de fichiers =
 +
* Lecture d'un fichier
 +
<source lang='perl'>
 +
open(F, '<filename');
 +
while (<F>) {
 +
  ...
 +
}
 +
close(F);
 +
</source>

Revision as of 18:31, 6 February 2013

Perl (pour Pratictal Extraction and Reporting Language) est un langage de programmation/script. Il met en oeuvre le paradigme de la programmation itérative.

Contents

Types de données

  • nombre entier
  • nombre réels
  • chaîne de caractères. Comme dans un script shell, dans une chaîne délimitée par des simples quote ' , les variables ne sont pas remplacées par leur valeur contrairement aux chaînes délimitées par des double quote ".
  • descripteur de fichier
  • référence (pointeur)

Structures de données

  • les scalaires (SCALAR) utilisant la notation $. Par exemple $filename = 'sequences.fasta' contiendra typiquement le nom (ou chemin) d'un fichier.
  • les listes ou tableaux (ARRAY) utilisant la notation @. Par exemple @filenames = ['comE_sequences.fasta', 'comD_sequences.fasta']. Pour accéder à un élément, on utilise un indice : $filenames[3] pour le quatrième élément.
  • les tableaux associatifs (HASH) avec la notation %. Par exemple %gene_annotations = { 'comD'=>'sensor', 'comE'=>'response regulator' } ou bien %gene_annotations = [ 'comD', 'sensor', 'comE', 'response regulator']. Pour accéder à un élément : $gene_annotation{'comD'}.

Pour plus de détails, cf. http://perldoc.perl.org/perldata.html


Quelques fonctions essentielles

L'ensemble des fonctions disponibles : http://perldoc.perl.org/perlfunc.html#Perl-Functions-by-Category

Opérations sur les listes

Les listes peuvent se manipuler comme des piles (LIFO), files (FIFO) ou autres grâce aux opérations :

  • $elem = pop @list; récupère (et supprime de la liste) le dernière élément
  • push @list, $elem; opération duale de pop : ajoute l'élément en fin de liste
  • $elem = shift @list; récupère (et supprime) le premier élément de la liste
  • unshift @list, $elem dévinez !
  • $nb_elem = scalar @list; interprète la liste dans un contexte scalaire ce qui correspond à récupérer le nombre d'éléments.
  • sort @list trie la liste par ordre lexicographique. Si l'on veut trier par ordre numérique croissant (11>2 alors que "11"<"2") il faut spécifier la routine de tri : sort {$a <=> $b} @list.
  • itérations sur chaque éléments: foreach my $elm (@list) { print $elm; }


Opérations sur les tableaux associatifs

  • @list = keys %hash;
  • les clés triées : @list = sort keys %hash;
  • les clés triées en fonction des valeurs en ordre numérique décroissant : @list = sort { $hash{$b} <=> $hash{$a} } keys %hash;

cf. http://perldoc.perl.org/functions/sort.html pour plus d'exemples de tri.

  • les valeurs : @list = values %hash;
  • itérations sur chaque élément : foreach my $key (keys %hash) { print $hash{$key}: }
  • test de l'existence d'une clé : defined $hash{$key}


Quelques particularités

Certaines variables sont prédéfinies :

  • $_ et @_ correspondent à la variable par défaut ou variable courante.

Exemple :

foreach (@list) {
   print $_;
}


  • < > correspond au fichier passé en paramètre au script.

Exemple : lancement du script suivant avec la commande: sh> perl le_script.pl un_fichier_texte.txt

#!/usr/bin/perl
 
while (< >) {
   chomp;
   print $. . $_;
}

Commentaires : la boucle while itère sur chaque ligne du fichier. La fonction chomp supprime le caractère de fin de ligne (ici, le fait de l'appeler sans paramètre l'applique à la variable par défaut $_ qui est une ligne du fichier texte). La variable spéciale $. correspond au numéro de ligne du fichier. Le '.' qui suit correspond à la concaténation de chaînes de caractères.

Manipulation de fichiers

  • Lecture d'un fichier
open(F, '<filename');
while (<F>) {
  ...
}
close(F);