Cours théorique 2

Retour sur les structures de contrôle

Précision sur les blocs : les {} sont obligatoires!

Qu'est-ce qui est vrai?

En Perl, tout est vrai, sauf 0, '' ou "" (les chaînes vides) et undef.

On peut donc faire des opérations de ce genre :

	    if ($var){
		# faire quelque chose
	    }
	

Comment faire la différence entre un variable non défini (qui contient donc undef) et une variable qui contient une chaine vide, ou zéro?
Avec la fonction intégré defined :

	    $var = 0;
	    if (defined($var)){
		print "var est défini!\n";
	    }
	

Les syntaxes "exotiques"

Perl supporte aussi d'autres syntaxes non-traditionnelle pour les boucles et les condictions. Les boucles et conditions peuvent être "inversées":

	    $hello = 1;
	    print "hello" if $hello;

	    @nos = (1, 4, 5, 6, 7);
	    print "no : $_\n" while @nos;

	    $ok = une_erreur();
	    warn "attention" unless $ok;
	

Variables "magiques"

Perl a un ensemble de "variables magiques" qui sont défini automatiquement en tout temps. La plupart peuvent être modifié pour changer le comportement de certaines commandes. Généralement, on utilise très peu ces variables, sauf quelques unes :

Pour l'instant, concentrons nous sur $_.

Cette variable est utilisé automatiquement lorsqu'il n'y a pas de variables clairement donnée dans le contexte. Par exemple :

	    %couleurs = ('bleu' => 'ciel',
	    'rouge' => 'pomme',
	    'vert'  => 'brocoli');
	    foreach (keys %couleurs){
		print "$_\n";
	    }

	    @tableau = qw( longue liste de mots );
	    print while (@tableau);

	    foreach (1..10){
		print "$_ : $tableau[$_]\n";
	    }
	

Les opérateurs

Les derniers exemples nous ont donnés de nouveaux opérateurs. Commencons par expliquer ces 2 là:

Liste des opérateurs

Perl supporte la plupart des opérateurs qu'on connait en C/Java, plus un certains nombres d'autres, dont en voici la liste des plus courants :

Pour la liste de tous les opérateurs, consulter le manuel de Perl

Les fonctions utilisateurs

Tous les langages (enfin, la plupart...) supporte le concept de "sous-routine". Perl aussi!

Comment définir une fonction :

La structure générale est comme ca :

sub nom {
}
        

Le mot clé sub, puis le nom de la fonctions, et un bloc de code séparé entre accolade.

Pour recevoir des paramètres :

sub nom {
   my $param = shift; # la variable magique @_ a l'oeuvre
}
# Ou encore
sub nom {
   my ($param1, $param2, @reste) = @_;
}
	

Le mot clé my est important lorsqu'on travaille avec des fonctions. S'il n'y est pas (il ne faut pas avoir un use strict), toutes les variables sont globables. Il est donc très facile de se marcher sur les pieds! Avec un my, la variable existe seulement à l'intérieur du bloc.

Retourner des valeurs :

sub nom {
   my ($param1, $param2, @reste) = @_;
	# ... bla-bla
	return $out;
} 
	

Il est également possible de retourner plus d'une valeur à la fois; on retourne alors une liste/un tableau :

sub nom {
   my ($param1, $param2, @reste) = @_;
   # ... bla-bla
   return ($out1, $out2, $out3);
} 
# ou encore
sub nom2 {
   my ($param1, $param2, @reste) = @_;
   # ... bla-bla
   return @out;
}
	

Comment appeler une fonction

Il y a plusieurs façons :

	    nomfonction 'param1', 'param2';
	    nomfonction('param1', 'param2');
	    &nomfonction;
	    nomfonction();
	

Les fonctions intégrés

Perl est plein de fonctions intégrés, et possède encore plus de fonctions défini dans des modules. Laissons les modules de côtés pour le moment...

Travailler avec des fichiers - les entrées/sorties

open / close

print, printf, warn

Travailler avec des fichiers - opérations sur les fichiers

Test de fichiers

-x, -e, -z, etc.

Les attributs des fichiers

chmod, chown, stat, lstat

Le temps

time, localtime, gmtime