rah!

rah!

>>>Premiers contacts avec Perl.

Perl a été conçu à l'origine pour manipuler des données textuelles, créer des rapports.

perl -v

Cette commande permet de savoir si Perl est bien installé, et affiche la version du logiciel.

SF développe sous version 5.8.9, mais veut rester au fait des nouveautés des versions plus récentes. Coder sous 5.8.9 évite d'avoir à réécrire le code et permet de disposer de librairies pas encore implémentées dans des versions plus récentes.

>>>Comment on lance un script Perl?

perl etoiledelamort.pl argument_1 argument_2 etc
#argument_1 = c3po.txt
#argument_2 = “r2d2”

Objectif quand on débute en Perl: écrire du code le plus lisible possible !

En Perl, pas de notion de typage. Pas besoin de prédéfinir le type de la variable que l'on va utiliser.

$a = "1";
$b = 2;
$c = $a+$b;

Concernant la troisième ligne, Perl va afficher le résultat d'une addition. Perl se fie au contexte pour réaliser les opérations. Certains considèrent ce phénomène comme un véritable problème.

print "Hello, world\n"; 
print STDOUT "Hello, world\n";

# TOUTES les commandes Perl se terminent par un ";" 

# print prend deux arguments: 
# argument1 où on affiche (si non renseigné, par defaut, ce sera l'ecran)
# argument2 ce qu'on affiche 

Pour lancer le script, deux façons:

perl script.pl
#le plus simple et le plus pratique

script.pl
#après avoir fait: chmod +x script.pl
#chmod permet de rendre éxecutable script.pl

>>>Les types de données.

En Perl, trois types de structures de données importantes: Les valeurs scalaires sont les variables de base. Elles peuvent contenir soit des données numériques (entiers ou relatifs), soit des chaînes de caractères (soit des références, passons).
Une liste est une suite (donc ordonnée) de valeurs scalaires.
Un tableau associatif (hash table en anglais) est un type de donnée permettant d'associer une valeur à une clef.

Toutes les variables se nomment sous la forme: $var

>>>Récapitulatif sur les fonctions.

pushajouter des éléments à la fin d'une liste ; renvoie aussi le nombre d'éléments de la liste
popfaire éclater un élément de la liste
shiftpermet d'extraire l'élément en première position de la liste
unshiftpermet d'insérer un élément dans une liste en première position
deletepermet de supprimer un élément particulier

>>>Gérer des données.

Dans un tableau associatif (ou table de hashage), à chaque clé va être associée une valeur:

%hash = ( 
	laz     => "Linux Azur", 
	jm2l    => "Journée Méditerranéenne des Logiciels Libres", 
	42      => "la réponse", 
	);

Une fois créé, on peut rappeler les valeurs de la façon suivante:

$var1 = $hash{"laz"};
$var2 = $hash{"jm2l"};
$var3 = $hash{42};

$c3po{"r2d2"}=1;

#cette ligne permet de créer une hash table
#lui associer directement un couple clé/valeur

Etape suivante, traiter les éléments d'une liste ou d'une table de hashage, boucle foreach:

foreach $droid (@starwars){
	print $droid;
	}

$i=0;
foreach my $droid (@starwars) {	# pour chacun des éléments de la liste...
	$i=$i+1;	# on incrémente
    	print "$droid est le droid n°$i de Star Wars !\n";
	}

#autre façon d'écrire $i=$i+1:	$i++

On sait maintenant comment parcourir une liste.

Comment lire une table de hashage?
%array = ("le", 1, "avec", 10, "un", 3);

foreach $a (keys %array) {
	print "la clé $a a pour valeur $array{$a}\n";
	}

>>>Ouverture de fichiers et redirection de flux.

Ouverture d'un fichier en lecture:

open(FILEIN, "toto.txt)"; # ouverture en lecture de toto.txt

# FILE est un descripteur de fichier, toto.txt est un chemin relatif
# FILE est l'élément à travers lequel je vais interroger le fichier

Ouverture d'un fichier en écriture:

open(FILEOUT, ">titi.txt");	# ouverture en écriture de titi.txt
# > indique l'écriture dans le texte, >> indique la concaténation

/!\ Par défaut, la lecture d'un fichier en Perl se fait ligne par ligne!

Il existe une variable scalaire prédéfinie en Perl, $\ qui est associée à \n.

En encadrant le descripteur de fichier par des < >, on obtient:

$ligne=<FILEIN>	#la première ligne du fichier
$ligne=<FILEIN>	#la deuxième ligne du fichier
$ligne=<FILEIN>	#la troisième ligne du fichier

Ecriture dans un fichier:

$ligne=<FILEIN>	#une ligne du fichier
print FILEOUT $ligne; #voilà comment on la redirige vers fichier

Splitter le texte ligne par ligne:

@file = <FILEIN> #marche très bien, mais gourmand en mémoire!

Lire un fichier toto.txt et le rediriger vers titi.txt (programme idiot):

a) dans le terminal on lance:

perl idiot.pl toto.txt titi.txt

b) le script contient les lignes suivantes:

open(FILE1,"$ARGV[0]");
open(FILE2,">$ARGV[1]");
	
while ($ligne = <FILE1>) {
	print FILE2 $ligne
	}

>>>Recherche/extraction/substitution.

Chercher un motif dans un string:

$texte = "Le petit chat";	# string
$texte =~ /Le/;		# motif

Ces deux lignes vont juste rendre un résultat, qui sera True puisque le motif a été trouvé. Il faut ajouter d'autres lignes de code pour renvoyer un résultat visible, comme une substitution:

$texte =~ s/Le/le/g;	#"Le" sera remplacé par "le"

Renvoyer des résultats au sein d'une recherche:

$texte =~ /(Le petit)(chat)/;
print $1;	# la 1ère () correspond à $1 et contiendra "Le petit"
print $2;	# la 2ème () correspond à $2 et contiendra "chat"

Il faut écrire le(s) print tout de suite après la recherche ou bien les stocker dans une variable!

$texte =~ /(Le petit)(chat)/;
$var1 = $1;	# la 1ère () est stockée dans $var1
$var2 = $2;	# la 2ème () est stockée dans $var2


>>>Quelques conseils

Voici quelques conseils qui pourraient vous être utiles (si vous en prenez compte AVANT de commencer à travailler):
  • Codez un peu, mais très régulièrement! Ce n'est pas moi qui le dis, mais SF, JMD et RB (et tout le monde en fait). La programmation, ce n'est que de l'entraînement. Les débuts sont difficiles, mais celà devient très vite exaltant de pouvoir coder des micro-scripts qui vous faciliteront la vie.

  • INSTALLEZ UBUNTU EN DOUBLE-BOOT. La Virtual-Box, c'est pas mal, mais dès que quelque chose cloche, c'est l'enfer. Cygwin idem. Evitez-vous les problèmes, si vous n'êtes pas des experts en informatique et faites une installation propre le plus tôt possible.

  • Utilisez Dropbox au maximum. Echanger un ou deux fichiers par mail ou clef USB c'est pas un souci, mais si vous devez mettre à jour plusieurs scripts, des pages Html, partager un nombre de fichiers de sortie énorme (c'est ce qui va se passer), Dropbox est une excellente solution.

  • Prenez le temps de penser à votre organisation. La réussite d'un projet dans une vraie boîte est conditionnée à 80% par son organisation (je sais de quoi je parle). Un projet de l'envergure de la BaO n'est pas différent. Donc, même si vous êtes en retard, prenez le temps de vous organiser, c'est du temps que vous gagnerez.

  • Vous aurez à faire des choses parfois un peu difficiles, mais essayez de prendre du plaisir à ce que vous faites. Celà se ressentira toujours sur les projets que vous aurez à rendre!

  • Faites des back-ups! Planquez des clefs USB n'importe où, confiez-en une à votre grand-mère, mettez vos données dans le cloud, c'est vous qui voyez, mais faites très régulièrement des sauvegardes. Vous êtes prevenus.

  • Si vous pensez avoir une bonne idée, foncez tête baissée!