[Perl] - Les bases jusqu'aux objets TK et aux sockets

Ecrit par tchess, le 05 Jan 2005 dans la catégorie Programmation

Avant le cours

Perl est un langage interprété, c'est-à-dire qu'il n'est pas compilé.
Les fichiers perl ont l'extension .pl.
Pour les lancer, vous utiliserez la commande perl.

Si vous êtes sous windows, vous devez installer ActivePerl.
Si vous êtes sous Linux, tout est déjà installé, sauf les modules Tk disponibles ici(liste) ou ici directement.

Les variables

En Perl, les variables sont dividés en trois types :


#!/usr/bin/perl
# #! se prononce "shee-bang". Cette ligne permet d'ouvrir le script directement sous unix
# Sous Unix tapez : chmod 755 script.pl pour le rendre executable puis script.pl
# Sous Dos et Unix (si vous n'avez pas mis la ligne du #!) tapez perl script.pl


$var = "Ceci est une variable scalaire";
@tableau = ("Elément 0","Elément 1","Elément 2","Elément 3");
%tableauassociatif = ("one","un","two","deux");
# Un tableau associatif peut aussi prendre cette forme qui me semble plus facile :
%tableauassociatif2 = ( "one" => "un", "two" => "deux" );

print $var;
print $tableau[0];
print $tableauassociatif{"two"};
# Ces lignes affichent Ceci est une variable simpleElément 0deux à l'écran

Pour définir les variables, on utilise $, @ et % suivant leur type. Pour les manipuler, on utilise toujours $.

Les opérateurs

Les opérateurs pour les chaînes de caractères :
print "chaine".' '."séparée"; : Pour séparer des chaînes, on utilise ".".

Pour comparer des chaines :
ne : inégalité
eq : égalité
lt : inférieur
gt : supérieur
le : inférieur ou égal
ge : supérieur ou égal

Les opérateurs pour les nombres
+ - * / => addition, soustraction, multiplication, division
** : puissance
% : modulo
$num++ et $num-- => incrémentation et décrémentation

< : inférieur
> : supérieur
<= : inférieur ou égal
>= : supérieur
== : égalité
!= : différence

Les structures de contôles

If et else :
if(condition)
{
Instruction à éxécuter si condition retourne true
}
else
{
Instruction à éxécuter si condition retourne false
}

While :
while(condition) {
Instructions à éxécuter tant que condition retourne true
}

For :
for($i=0;$i<10;$i++) {
Instructions qui vont tourner tant que $i est plus petit que 10, à chaque tour $i s'incrémente
}


<STDIN>

L'élément STDIN représente par défaut le clavier.
Exemple de code qui l'utilise :
#!/usr/bin/perl

$in = <STDIN>;
print "\nVous avez écrit : ".$in;

while(<STDIN>) { # on récupère par défaut dans la variable $_
  if($_ eq 'help') { print "aide"; }
}


Les fichiers

En Perl, la gestion est très facile, comme presque toutes les possibilités de Perl d'ailleurs.
Exemple de code qui ouvre un fichier, écrit son contenu à l'écran puis lui ajoute une ligne :
#!/usr/bin/perl

open(FILE, "fichier");

while(<FILE>) {
  print $_;
}
print FILE "Ecriture sur le fichier";

close(FILE);


Les sockets

Pour créer des sockets, on utilisera IO::Socket::INET
Pour ça, il faut rajouter cette ligne :
use IO::Socket::INET
Maintenant on va initialiser le socket :
#Client
$socket = IO::Socket::INET -> new ( Proto => 'udp', PeerAddr => 'localhost', PeerPort => 666 );

#Server
$socket = IO::Socket::INET -> new ( Proto => 'udp', LocalPort => 666 );

On va envoyer/réceptionner les paquets :
#Client
print $socket "test";

#Server
while(1) {
  $socket->recv($msg,255);
  print $msg;
}


Les modules Tk

Les modules Tk permettent de créer des applications graphiques :

Fenêtres mère et filles
#!/usr/bin/perl
use Tk;

$FenetrePrincipale = new Maindow;
$FenetrePrincipale -> title("Fenêtre Mère");

$fenetrefille = $FenetrePrincipale -> TopLevel;
$fenetrefille -> title("Fenêtre fille");

$fenetrefille -> raise;
MainLoop();

L'élément Label
Il permet d'écrire du texte et est employé comme suit :
use Tk;

$fp = new MainWindow;
$fp -> title("Fenêtre contenant un texte");

$texte = $fp -> Label ( -text => "Le texte à écrire" );

$texte -> pack;
MainLoop();
...$fp -> ... : on définit où va être le label.
Pour que vos éléments s'affichent, vous devez obligatoirement les packer.

Quelques éléments et leurs paramètres

NomFonctionParamètres
LabelPermet d'écrire du texte-textvariable => \$var
-text => "Le texte"
EntryPermet à l'utilisateur d'écrire du texte-textvariable => \$varstockage
ButtonAffiche un bouton-text => "Texte du bouton"
-command => \&SubAAppeler
RadioButtonAffiche un bouton radio-text => "Le texte du bouton radio"
-value => "Valeur qui va aller dans la variable"
-variable => \$var
CheckButtonAffiche une case à cocher-text => "Texte de la case à cocher"
-variable => \$resultat
-onvalue et -offvalue définissent la valeur de $resultat dans l'exemple
Si ces paramètres ne sont pas présents $resultat est à 1 ou 0
ListBoxCrée une liste d'élément à sélectionner-selectmode => "single" Peut être sigle, multiple, extended ou browse

Pour les éléments on fait (si le listbox est représenter pas $listbox) :$listbox -> insert ( 0, 'Choix UN', 'Choix DEUX' );-width et -height pour les dimensions
FrameCrée un cadre
Pour mettre des éléments dans le cadre on mettra le nom
du cadre à la place du nom de la denêtre lors de la création
-relief => 'groove' (peut être 'flat', 'groove', 'raised', 'ridge', 'sunken' ou 'solid')
-borderwidth => 2 : largeur des bordures
-width et -height pour les dimensions
TextCrée une zone de texte
On utilise insert pour remplir l'élément (Voir ListBox)
-width et -height pour les dimensions


Sources:
http://lionel.romain.free.fr/

Si vous avez un commentaire à faire à l'auteur de cet article, cliquez ici !