Cours théorique 3

Les fonctions intégrés - suite

Manipuler les fichiers

link, unlink, rename, mkdir, rmdir

Manipuler les tableaux

push, pop, shift, unshift, splice

les "slices" : une tranche

	    @tableau = (22, 43, 445);
	    @tab2 = @tableau[1,2];
	    # @tab2 contient maintenant (43, 445);
	    @tab3 = qw( bob bill joe steve)[2,3];
	    # @tab3 contient ('joe', 'steve');
      

sort, reverse, grep, map

grep et map sont issus tout droit du monde de la programmation fonctionnelle (la famille de langage qui comprend lisp, sheme, ml, etc.). ils supposent un "mode de pensée" qui diffère du mode "procédural" et sont donc plus rarement vu.

sort, par contre, est très utilisé, sous plusieurs variantes :

# Merci à la documentation de Perl : http://www.perldoc.com/perl5.8.0/pod/func/sort.html
    # tri "asciibetique"
    @articles = sort @files;

    # idem, mais avec comparaison explicite en mode "chaine"
    @articles = sort {$a cmp $b} @files;

    # tri insensible à la case
    @articles = sort {uc($a) cmp uc($b)} @files;

    # tri asciibetique, mais inverse
    @articles = sort {$b cmp $a} @files;

    # tri numérique
    @articles = sort {$a <=> $b} @files;

    # tri numérique descendant
    @articles = sort {$b <=> $a} @files;

    # tri le tableau associatif %age bar sa valeur plutot que par la clé
    # en utilisant une fonction "en-ligne" : remarquez l'absence de virgule...
    @eldest = sort { $age{$b} <=> $age{$a} } keys %age;

    # tri avec une fonction défini explicitement
    sub parage {
	$age{$a} <=> $age{$b};	# on suppose que les valeurs sont numériques.
    }
    @classetrie = sort parage @classe;

Il y a plusieurs autres exemples : voir la documentation pour en avoir plus

Manipuler les tableaux associatifs

keys, values, exists, delete, each

Exemple pour each:

   while (($key,$value) = each %ENV) {
	print "$key=$value\n";
    }  

Note pour keys, values et each : l'ordre dans lequel les entrées sont retournées est imprévisible : ce n'est PAS l'ordre dans lequel les entrées ont été mises dans le tableau associtatifs. Ça peut l'être, mais il est probable que non.

Contrôler le programme

L'environnement d'exécution

chdir : change le répertoire "courant" du processus Perl.

die, exit

die : meurt bruyamment, pour les cas d'erreur : affiche ses paramètres sur l'erreur standard.

exit : sort "gentiment" du programme. Va retourner la valeur passé en paramètres au processus qui a appelé le programme : utile dans les scripts shell.

sleep

"Dort" le nombre de secondes passé en paramètres.

eval

Evalue et exécute le code perl passé en paramètres.

$code = '$a = "bob"; print $a;';
eval $code; # execute le contenu de $code
	

Manipuler les processus

system, qx// (et opérateur ``), exec

Permet l'exécution de programmes externes.

exec : remplace le script en cours par le programme appelé. Votre script s'arrête à cet endroit et passe la main à l'autre programme.

system : appele un programme externe et retourne la valeur retournée par le programme.
print "tout est ok\n" if (!system("cp", $source, $dest)); # cp retourne 0 si tout va bien

qx// et/ou `` (aussi appelé l'opérateur "backticks"):
Exécute le contenu passé et retourne la sortie du programme.
print `who`; # affiche la sortie du programme who;

Les autres processus

kill, fork, wait

kill(SIGNAL, PID): Envoie un signal au processus donné.

fork : lance un processus fils

wait : sert à attendre la "mort" d'un processus fils qu'on aurait lancé au préalable.

Manipuler les chaines de caractères

chomp, chop

chomp: Coupe les sauts de lignes à la fin de la chaine. Si on passe un tableau, coupe les sauts de ligne à la fin de chaque éléments du tableau.

chop : coupe le dernier caractère, peu importe ce que c'est.

lc, uc, lcfirst, ucfirst

crypt

Encrypte la chaine en utilisant les fonctions unix traditionnelle de crypt. Encryption à sens unique, relativement faible : voir d'autres mode d'encryption plus poussé pour du "travail sérieux", ie MD5, DES, Blowfish, etc.

substr

substr CHAINE,DEPART[,LONGUEUR [,REMPLACEMENT]]
Extrait une chaine de caractère d'une autre chaine, a partir de DEPART, de LONGUEUR nombre de caractères, en la remplacant par REMPLACEMENNT.

length

Retourne la longueur de la chaine passé en paramètre.

Ok et maintenant?

Trouver la documentation de ces fonctions, trouver d'autres fonctions