Technologie des Serveurs Internet. Langage Perl



Documents pareils
L3 informatique TP n o 2 : Les applications réseau

Serveurs de noms Protocoles HTTP et FTP

HTTP HTTP. IUT1 dpt SRC L Isle d Abeau Jean-françois Berdjugin. Introduction et architecture Messages Authentification Conclusion

1 Introduction Propos du document Introduction De HTTP 1.0 à HTTP

Gilles.Roussel univ-mlv.fr HTTP/1.1 RFC 2068

(structure des entêtes)

RFC 7230 : Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing

Dans l'épisode précédent

Protection des protocoles

Le protocole HTTP. 10 minutes pour comprendre. HTTP/0.9 - Lacunes et limitations HTTP/1.0 HTTP/1.1

18 TCP Les protocoles de domaines d applications

WebSSO, synchronisation et contrôle des accès via LDAP

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Initiation à la programmation en Python

Réseaux. 1 Généralités. E. Jeandel

Algorithmique et Programmation, IMA

Manuel d'installation

Programmation Web. Madalina Croitoru IUT Montpellier

Hébergement de site web Damien Nouvel

Protocoles DHCP et DNS

Perl Orienté Objet BioPerl There is more than one way to do it

Réseaux et protocoles Damien Nouvel

SQUID P r o x y L i b r e p o u r U n i x e t L i n u x

Activité sur Meteor. Annexe 1 : notion de client-serveur et notion de base de données

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

Protocoles Applicatifs

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Architectures web/bases de données

TP 1. Prise en main du langage Python

«Cachez-moi cette page!»

E-TRANSACTIONS. Guide du programmeur API Plug-in. Version 1.1

Introduction à HTTP. Chapitre HTTP 0.9

Couche application. La couche application est la plus élevée du modèle de référence.

Mr. B. Benaissa. Centre universitaire Nâama LOGO

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Le service FTP. M.BOUABID, Page 1 sur 5

FOIRE AUX QUESTIONS PAIEMENT PAR INTERNET. Nom de fichier : Monetico_Paiement_Foire_aux_Questions_v1.7 Numéro de version : 1.7 Date :

WebDAV en 2 minutes. Tous ces objectifs sont complémentaires et ils sont atteints grâce au seul protocole WebDAV. Scénarii

Linux sécurité des réseaux

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

titre : CENTOS_CUPS_install&config Système : CentOs 5.7 Technologie : Cups Auteur : Charles-Alban BENEZECH

SSH, le shell sécurisé

Vulnérabilités et sécurisation des applications Web

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Devoir Surveillé de Sécurité des Réseaux

Stockage du fichier dans une table mysql:

Programmation Internet Cours 4

Manuel d'utilisation d'apimail V3

Application Web et J2EE

PHP 5.4 Développez un site web dynamique et interactif

L identité numérique. Risques, protection

SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM

Serveur d application WebDev

L'AAA, késako? Bruno Bonfils, fr.org>, Novembre Sous ce terme d'apparence barbare est regroupé l'ensemble des concepts suivants :

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Service de certificat

Protocole SIP et rc o d n o C ée yc L N E S ro P c a B

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Guide d'initiation aux. certificats SSL. Faire le bon choix parmi les options qui s'offrent à vous en matière de sécurité en ligne. Document technique

Types MIME (2) Typage des ressources Internet. Les URI. Syntaxe dans les URI. Possibilité de spécifier un paramètre du sous-type

Proxy et reverse proxy. Serveurs mandataires et relais inverses

GENERALITES. COURS TCP/IP Niveau 1

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

Développement Web. Les protocoles

Les messages d erreur d'applidis Client

SSL. Secure Socket Layer. R. Kobylanski janvier version 1.1 FC INPG. Protocole SSL Application avec stunnel

Installation et utilisation d'un certificat

Installation et configuration de Vulture Lundi 2 février 2009

Manuel d'utilisation du navigateur WAP Palm

Configurer le Serveur avec une adresse IP Statique (INTERFACE :FastEthernet) : et un masque


Richard MONTBEYRE Master 2 Professionnel Droit de l Internet Administration Entreprises. La banque en ligne et le protocole TLS : exemple

INF8007 Langages de script

Services Réseaux - Couche Application. TODARO Cédric

webmestre : conception de sites et administration de serveurs web 42 crédits Certificat professionnel CP09

Application de lecture de carte SESAM-Vitale Jeebop

Utilisation des certificats X.509v3

Module BD et sites WEB

Gestion collaborative de documents

Services bancaires par Internet aux entreprises. Guide pratique pour : Transfert de fichiers Version

IIS, c est quoi? Installation de IIS Gestion de base de IIS Méthodes d authentification. Edy Joachim,

Content Switch ou routage de niveau HTTP

Hébergement de sites Web

WEBMESTRE : CONCEPTION DE SITES ET ADMINISTRATION DE SERVEURS WEB

SSL ET IPSEC. Licence Pro ATC Amel Guetat

ETI/Domo. Français. ETI-Domo Config FR

Table des matières Hakim Benameurlaine 1

Corrigé de l'atelier pratique du module 8 : Implémentation de la réplication

L3 informatique Réseaux : Configuration d une interface réseau

Présentation du relais HTTP Open Source Vulture. Arnaud Desmons Jérémie Jourdin

Le serveur HTTPd WASD. Jean-François Piéronne

Standard. Manuel d installation

Développement d applications Internet et réseaux avec LabVIEW. Alexandre STANURSKI National Instruments France

CS REMOTE CARE - WEBDAV

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Introduction. Adresses

Transcription:

Technologie des Serveurs Internet Jean Denis Girard :: jd.girard@sysnux.pf SysNux BP 110076 98709 Mahina Tahiti Polynésie française http://www.sysnux.pf/ Année 2015

Plan Protocole HTTP Serveur Web (Apache) Serveur d'application (Zope / Plone)

Protocole HTTP Protocole au niveau application (niveau 7 du modèle OSI) pour l'accès aux documents hypermédias (MIME) distribués, défini par les RFC 1945 (HTTP/1.0 1996) et 2068 (1998) puis 2616 (HTTP/1.1 1999), par www.w3c.org. Aucune hypothèse sur la couche réseau; dans la pratique TCP/IP assure la «connexion». Protocole de type client / serveur (ou requête / réponse) : le client envoie une commande au serveur sous la forme d'une requête définissant une «méthode», un «URI», une version du protocole, éventuellement suivi d'entêtes, d'une ligne vide et éventuellement d'un contenu. Le serveur répond avec une ligne d'état (version du protocole et résultat) suivi d'entêtes avec des informations du serveur et sur le document, une ligne vide, puis, éventuellement, le document lui même. Protocole HTTP

Le client, par l'intermédiaire de son navigateur (UA = user agent), envoie une requête au serveur (O = origin server), qui lui envoie à son tour la réponse, en une ou plusieurs connexions (v): Cas simple requête > UA v O < réponse Avec intermédiaires: requête > UA v A v B v C v O < réponse Protocole HTTP

Passerelle (gateway): système qui agit comme intermédiaire du serveur réel; le client ne sait pas qu'il parle à un intermédiaire. Il s'agit par exemple d'un ou plusieurs routeurs. Modifie le protocole utilisé Proxy: programme (niveau application), qui sert de relais entre le client et le serveur; il doit donc lui même être à la fois client et serveur. Le client (UA) doit être configuré pour communiquer avec un proxy. HTTP est aussi utilisé comme protocole de communication générique vers les proxies pour d'autres applications (FTP,...). Peut modifier les réponses et requêtes. Tunnel: établit une connexion transparente entre le client et le serveur, à travers plusieurs intermédiaires, sans modification ni mise en cache. Protocole HTTP

Repérage des documents: pour HTTP, une URI (Uniform Resource Identifier) est simplement une chaîne de caractères permettant de définir un document. URL (uniform ressource locators) HTTP: http[s]://serveur:port/chemin_absolu/nom_fichier Par défaut port=80. Le nom de serveur ne différencie pas les majuscules des minuscules. Par contre, les chemins et noms de fichiers sont sensibles à la casse. Si le serveur n'est pas spécifié, le serveur actuel est utilisé. Si le chemin ne commence pas par /, le document actuel sert de base pour rechercher le nouveau document (chemin relatif) : URL relative / absolue. Les caractères non ASCII ou spéciaux doivent être codés (cf. rfc3986) : code du caractère (espace =>%20 ou &#32 ;) ou entités. Protocole HTTP

Méthodes des requêtes HTTP: GET: lire un document (statique), POST: envoyer des données au serveur, et obtenir la réponse (traitement), HEAD: lire l'entête d'une réponse, TRACE: serveur retourne la requête telle quelle (outil de test), PUT: envoyer un document au serveur, DELETE: effacer un document du serveur. Syntaxe: <METH> <URI> HTTP/<version> La fin de la requête est signalée par une ligne vide. Ex: >telnet localhost http GET /manual/new_features_2_0.html HTTP/1.0 >telnet www.kernel.org http HEAD / HTTP/1.0 Protocole HTTP

Entêtes de requêtes: Les entêtes permettent au client de transmettre des informations complémentaires au serveur. Syntaxe: <ENT>: <paramètres> HTTP/1.1 rend obligatoire l'entête «Host: nom_serveur», pour gérer les serveurs virtuels (plusieurs noms gérés par un seul serveur). Ex: >telnet lvs.mana.pf http GET / HTTP/1.1 Host: www.linux.pf Protocole HTTP

D'autres entêtes (optionnelles) permettent au client de définir un certain nombre de préférences, comme la langue, les formats de fichiers acceptables... c'est la négociation de contenu. Exemple d'entêtes: accept-language: fr, en-gb; q=0.8, en; q=0.7 accept-encoding: gzip Les préférences sont généralement ignorées par le serveur s'il ne peut y répondre. Dans tous les cas, la configuration du serveur permet de définir une réponse appropriée. Protocole HTTP

Réponse du serveur: contient le code de réponse qui indique le résultat global de la requête, puis des entêtes qui donnent des informations générales sur le serveur et/ ou le document, puis enfin le cas échéant le document à afficher dans le navigateur. 200 OK la requête a abouti, 301 Moved Permanently URI a changé, 304 Not Modified le document n'est pas modifié, 400 Bad Request requête mal formée, 401 Unauthorized autorisation nécessaire, 403 Forbidden autorisation refusée, 404 Not Found document introuvable, 405 Method Not Allowed méthode interdite, 408 Request Timeout temps pour requête écoulé, 500 Internal Server Error erreur du serveur lui même. Protocole HTTP

L'entête Date: est obligatoire dans HTTP/1.1; elle est notamment utilisée pour contrôler les caches. HTTP/1.1 200 OK Date: Tue, 10 Jan 2006 07:40:17 GMT Server: Apache/2.2.0 (Mandriva Linux/PREFORK- 6mdk) Last-Modified: Fri, 06 Jan 2006 13:04:49 GMT ETag: "949eb-2c-4b4bde40" Accept-Ranges: bytes Content-Length: 44 Connection: close Content-Type: text/html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head>... Protocole HTTP

La réponse ne concerne généralement qu'un unique document (page HTML, image, feuille de style ou code JavaScript); lorsque la réponse est terminée, le serveur coupe la connexion réseau. Néanmoins ce fonctionnement est coûteux, car une page Web typique comporte le fichier HTML lui même plus des images, une ou plusieurs feuilles de style,... HTTP/1.1 a introduit la notion de connexion «persistante» (keep alive), qui permet de transférer plusieurs documents dans une seule connexion réseau. Lorsque la réponse est terminée, le serveur attend une nouvelle requête, sans couper la connexion réseau. Protocole HTTP

Contrôle d'accès HTTP fournit un moyen simple de protéger les accès à certains documents ou groupe de documents. L'accès est donné si un couple (utilisateur, mot_de_passe) correct est passé au serveur (cf. rfc2617). Lorsque, le client demande (GET) un document protégé, le serveur envoie au client un code 401 (Authorization Required), et un entête : WWW-Authenticate: Basic realm="nom domaine" Dans la pratique, le navigateur ouvre alors une boîte de dialogue permettant d'entrer le nom d'utilisateur et le mot de passe; le navigateur renvoie la même demande (GET), augmentée d'un entête comportant un champ «Authorization». Protocole HTTP

Ex: Authorization: Basic amrnom1kca== La clé représente: nom_utilisateur:mot_de_passe, codé selon Mime/Base64. Attention: cette méthode n'est pas sûre, car il est trivial de retrouver le nom d'utilisateur et le mot de passe pour toute personne ayant accès au réseau; il faut obligatoirement l'associer à un chiffrage SSL. Application: «cracker» les nom d'utilisateurs / mots de passe en étudiant les trames avec un «sniffer» ethernet. Outil: wireshark + deux lignes de code Python: import base64 base64.decodestring("amrnom1kca==") Protocole HTTP

Contrôle des caches: Le rôle des caches est d'enregistrer les réponses issues des serveurs, dans le but qu'une requête identique ne soit pas soumise, ou que le serveur ne renvoie pas le document, afin de diminuer les temps de réponse, et l'occupation du réseau. Le problème essentiel est de déterminer si le document dans le cache est valide ou non. Le serveur peut être configuré pour envoyer des directives qui permettent de faciliter la décision. Normalement seules les requêtes GET sont mises en cache; les requêtes POST sont sensées réaliser un traitement, il faut les exécuter inconditionnellement. Protocole HTTP

La version 1.1 du protocole améliore notablement le contrôle des caches, à travers un double mécanisme : Expiration: si le document dans le cache n'a pas expiré, il est directement servi au client (pas de requête au serveur): entête Expires: ou Cache-Control: max-age dans la réponse Validation: le cache dispose du document, mais ne sait pas s'il est toujours valide. Il interroge le serveur. Les entêtes ETag: et Last-Modified: servent à évaluer la validité du document. La réponse 304 indique au cache qu'il peut réutiliser le document stocké localement. Protocole

Ex: dans une réponse, l'entête «Expires» définit quand la validité du document aura expiré. HTTP/1.1 définit aussi l'entête Cache-Control: qui peut être utilisée par le client ou le serveur. Cache-Control: max-age=0 force la validation auprès du serveur Cache-Control: no-cache force le cache à interroger le serveur. Protocole HTTP

CGI (Common Gateway Interface): site statique = fichiers (html, png, css, js,...) site dynamique = programmes (ou scripts) CGI définit essentiellement l'appel et le passage des paramètres, et l'envoi des résultats au navigateur. L'environnement d'exécution des scripts CGI est mis en place par le serveur web. Les résultats des scripts sont simplement imprimés sur la sortie standard par le script: le serveur web intercepte ces impressions et les envoie au navigateur. Il faut donc que cela respecte HTTP, et soit compréhensible par le navigateur. Protocole HTTP

Trois méthodes dans la RFC pour le passage des paramètres, seules deux sont utilisées : GET, paramètres nommés : http://serveur/cgi-bin/script?p1=v1&p2=v2 paramètres disponibles dans la variable d'environnement QUERY_STRING POST : POST /cgi-bin/script HTTP/1.1 [entêtes] p1=v1&p2=v2 paramètres transmis dans le corps de la requête puis lus sur l'entrée standard par le script CGI. Protocole HTTP

Sécurité (SSL Secure Socket Layer / TLS Transport Layer Security RFC2246) Objectifs: chiffrement, identité, intégrité Deux types de chiffrement : conventionnel (ou symètrique): par utilisation d'une clé partagée à clé publique (asymètrique): couple de clés. Cryptage effectué par l'expéditeur avec clé dite publique que le destinataire lui a transmise. Déchiffrement possible uniquement avec la clé privée. Intégrité : fonctions de hachage Identité : certificat (serveur et / ou client) Protocole https, sur port 443 Intermédiaire entre TCP/IP et HTTP (entêtes chiffrés!) Protocole HTTP

Intégrité des messages : Assurer que le message n'a pas été modifié durant son transport sur le réseau est aussi important que de le chiffrer. On utilise pour cela des algorithmes qui calculent un nombre de longueur fixe (digest) à partir d'un message de longueur quelconque. Ces algorithmes sont étudiés pour que deux messages différents fournissent des digest différents. Le digest calculé par l'expéditeur est ajouté au message envoyé; de son côté, le destinataire calcule le digest correspondant au message reçu. Si les digests transmis et calculés sont égaux, le message n'a pas été modifié pendant sa transmission. Algorithmes : MD5 (128 bits, cracké en 2004), SHA 1 (NSA, 160 bits, doute sur fiabilité depuis 2005), SHA 256 (256 bits) Protocole HTTP

Certificats: Le problème qui demeure est d'assurer que la clé publique est réellement celle du destinataire. On introduit donc un tiers, autorité de confiance (Certificate Authority), qui fournit des certificats signés par lui même, permettant d'authentifier la clé publique. La liste des autorités de confiance est intégrée dans les navigateurs Internet. Protocole HTTP

Éléments d'un certificat : Sujet: nom (Distinguished Name DN), clé publique Émetteur: nom (DN), signature Période de validité: début de validité, fin de validité Information administrative: version, numéro de série Information additionnelle: contraintes, etc. DN (cf. LDAP) est lui même composé d'un nom commun (CN: secure.sysnux.pf), du nom de l'organisation (O: Sysnux), du département (OU: cellule web), la ville (C: Papeete), de l'état ou province (ST: Tahiti), et du pays (C: PF). Le certificat est ensuite transmis sous forme binaire. Protocole HTTP

L'établissement de la session implique: 1. négociation du type de cryptage (méthode d'échange de la clé de session, algorithme, type de digest), 2.échange de la clé de session, 3. authentification du serveur (optionnel), 4. authentification du client (optionnel). Le web sécurisé utilise le protocole HTTP sécurisé par SSL (d'où le nom HTTPS); les seules différences sont donc le protocole dans l'url (https://...) et le port qui vaut 443 par défaut. C'est ce que fournit le module mod_ssl d'apache (cf. www.modssl.org), cette extension utilisant la bibliothèque libre OpenSSL (cf. www.openssl.org). (cf. documentation du module mod_ssl) Protocole HTTP

Protocole HTTP

L'utilisation de SSL pose problème avec les serveurs virtuels. L'extension Server Name Indication (rfc 4366) lève cette limitation en ajoutant le nom du serveur au début de la négociation SSL. Cette extension suppose le support côté client et serveur. Mozilla Firefox 2.0 Opera 8.0 Internet Explorer 7 (Windows Vista, pas XP) Google Chrome (Vista, not XP) Safari Safari 3.2.1 (Mac OS X 10.5.6, ou Vista, pas XP) Protocole HTTP

Serveurs Web Définition Le serveur Web est un programme qui réalise le protocole HTTP. Il attend les requêtes des clients (navigateurs), leur retourne les réponses appropriées (traitement des erreurs), et le cas échéant les documents demandés. Les documents peuvent dépendre des entêtes de requêtes (négociation de contenu); ils peuvent aussi être le résultat de programmes exécutés sur le serveur. Le serveur doit envoyer des entêtes de contrôle de cache... Il doit gérer les protections d'accès. Un serveur Web doit être multi tâche, rapide et sûr. Serveurs Web

État du marché http://news.netcraft.com/survey Serveurs Web

http://news.netcraft.com/archives/web_server_survey.html Novembre 2014 Décembre 2014 Apache 350,853,798 37.05% 358,159,405 39.11% Microsoft 306,029,307 32.31% 272,967,294 29.81% nginx 139,130,992 14.69% 132,467,763 14.47% Google 19,560,206 2.07% 20,011,260 2.19% Voir aussi tableau fiabilité. Serveurs Web

Introduction Perl est un langage de programmation interprété, à l'origine développé sous UNIX et spécialisé dans le traitement des chaînes de caractères ; Il hérite en cela d'outils tels que le shell, grep, sed, awk. Il a néanmoins évolué en un langage complet, aussi bien utilisé pour le web, que pour les applications scientifiques, l'accès aux bases de données, la programmation de jeux ou l'administration système. C'est un logiciel libre, qui fonctionne sur plus de cent plate formes. La version 1 est parue en 1987, 5.001 est sortie en 1995, et la version actuellement stable est 5.16.2, avec une branche 6 en développement depuis plusieurs années.

L'inventeur de Perl, Larry Wall, a la particularité d'avoir effectué des études de linguistique ; Perl en hérite, avec quelques caractéristiques proches des langages naturels, notamment la notion de contexte. Le style de programmation est très libre, d'ailleurs le slogan de Perl est : There's more than one way to do it (TMTOWTDI). Visitez www.perl.org! Le programme (ou interpréteur) perl permet d'éxécuter les scripts Perl, stockés par convention dans des fichiers ayant l'extension.pl. On peut néanmoins exécuter des instructions simples directement : perl -e 'print "Bonjour!\n ;"'

On peut aussi rendre les fichiers exécutables, et ajouter sur la première ligne : #!/usr/bin/env perl... On peut alors directement exécuter le script. La syntaxe de Perl est très permissive, mais on peut demander à l'interpréteur de prévenir si une variable est utilisée avant d'être initialisée, ou autre : #!/usr/bin/env perl use strict ; use warnings...

Syntaxe Toutes les instructions doivent être terminées par ; Les blocs de code sont indiqués par {} Les commentaires sont indiqués par # Les espaces n'ont pas d'importance en dehors des chaînes de caractères. Les chaînes de caractères sont délimitées par des guillemets: simples : pas d'interpolation des variables ou caractères spéciaux (\n) doubles : interpolation des variables et caractères spéciaux. Les parenthèses à l'appel de fonctions ne sont généralement pas obligatoires.

Une des premières caractéristique de Perl est sa gestion des variables. Les variables n'ont pas besoin d'être déclarées (sauf sous mode strict, utilisation de la fonction my), et il existe essentiellement, trois types : Scalaire : valeur unique, nombre (entier ou flottant) ou chaîne de caractères, indiqué par le caractère $, my $pi = 3.14; my $b = 'bonjour'; my $n = 'toto'; print "$b $n\n"; print 'Ce produit coûte 10$', "\n"; print 'Diamètre cercle de rayon 5 ', 2*$pi*5, "\n"; Certaines variables magiques existent par défaut, comme $_ qui est la variable par défaut.

Tableau : liste ordonnée indicée par un nombre entier (commence à 0), indiqué par le caractère @. Attention, les éléments d'une liste sont des scalaires! @t = ('a', 'bb', 123, $x, 'azerty', 6.51); print $t[0], "\n"; On peut obtenir des extraits ou tranches (slices) de listes : print @t[0,1], "\n"; print @t[1..3], "\n"; Dans un contexte scalaire, la variable @t renvoie le nombre d'éléments de la liste. La variable spéciale $# renvoie le dernier indice du tableau, @_ contient la liste des arguments passés à une fonction, et @ARGV, les arguments passés au script.

Dictionnaire (ou hash) : liste accédée par une chaîne de caractères, représenté par le caractère %. %rvb = ('R', 'Rouge', 'V', 'Vert', 'B', 'Bleu'); %jours = ('lun' => 'lundi', 'mar' => 'mardi', 'mer' => 'mercredi', 'jeu' => 'veudi', 'ven' => 'vendredi', 'sam' => 'samedi', 'dim' => 'dimanche'); print 'Nous sommes ', $jours{'ven'}, "\n"; Les fonctions keys et values permettent de renvoyer la liste des clés et des valeurs d'un dictionnaire.

Finalement les références vont permettre de construire des structures de données arbitrairement complexes. Une référence est indiquée par le symbole \ qui précède le nom de la variable (scalaire, tableau ou dictionnaire). La référence est elle même un élément scalaire. $pi = 3.14; $rs = \$pi; @t = ('a', 'bb', 123); $rt = \@t; %j = ('lun' => 'lundi', 'mar' => 'mardi'... $rd = \$j ; Le déréférencement est réalisé en ajoutant le symbole correspondant au type de variable avant le nom de la référence : $$rs; @$rt; %$rd;

On peut aussi construire des références dites «anonymes», c'est à dire qui ne s'appuient sur aucune variable précédemment déclarée. C'est plus particulièrement utile pour les tableaux et dictionnaires : $rs = \123.456; $rt = ['a', 'bb', 'ccc']; $rh = {'x' => 1.1, 'y' => -2.1e-5, 'z' => $rt}; Le déréférencement génère parfois des difficultés de lecture, aussi l'opérateur flèche ( >) a été créé, qui permet de faciliter la lecture : print ${$$rh{'z'}}[2] ; devient plus simplement : print $rh->{'z'}->[2] ;

Les variables créées avec my ont une portée limitée au bloc local {}. my $x = "var X"; my $condition = 1; if ($condition) { my $y = "var Y"; print "$x\n"; # Affiche "var X" print "$y\n"; # Affiche "var Y" } print "$x\n"; # Affiche "foo" print "$y\n"; # Erreur si mode strict Les variables déclarées sans my (si mode strict pas activé) ont une portée globale.

Structures de contrôle Perl dispose des structures de contrôle classiques. if (condition1) { instruction;... } elsif (condition2) {... } else {... } Le bloc est obligatoire même si l'instruction est unique. Il existe aussi une version négative : unless (condition) {... }

Le bloc est obligatoire même si l'instruction est unique., mais il existe des raccourcis pour ce cas : print 'ok!' if condition; print 'ko!' unless condition; Historiquement Perl ne dispose pas d instruction de type switch / case, néanmoins, depuis la version 5.10, on peut utiliser : use feature 'switch'; given ($v) { when ('a') { $x=1; } when ('b') { $x=2; } when ('c') { $x=3; } default { $x=0; } }

Boucles simples avec conditions positive ou négative, test au début ou à la fin : while (condition) {... } until (condition) {... } do {... } while (condition); do {... } until (condition); instruction while (condition); instruction until (condition);

Les boucles for existent sous deux formes, la deuxième étant préférée et plus rapide : for (my $i=0; $i< 10; $i++) { print "$i\n";... } my @t = (0..9); foreach my $i (@t) { print "$i\n";... } print "$_\n" foreach (@t); for et foreach sont en réalité synonymes.

On peut naturellement sortir d une boucle précocement ou continuer sans faire la fin de la boucle : while ($i<100) {... last if (condition); # Sortie immédiate... } my @t = (0..9); foreach my $i (@t) {... next if (condition); # Reprise immédiate... }

Les instructions last et next peuvent aussi prendre une étiquette en argument, par exemple, pour rechercher les couples de nombres dont le produit vaut une certaine valeur : @t = (0..100); my $v = 50; EXTERNE: foreach my $i (@t) { INTERNE: foreach my $j (@t) { if ($i * $j == $v) { print "$v = $i * $j\n"; next EXTERNE; } if ($j >= $i) { last INTERNE; } } }

Opérateurs Arithmétique : + - * / ** Chaînes de caractères, concaténation et multiplication :. x Comparaison numérique : ==!= > >= < <= Comparaison de chaînes de caractères : eq ne lt gt le ge Affectation : = Affectation combinée avec une opération : += -= *= /=.= x= Incrémentation / décrémentation : $i++ ++$i $i-- --$i Intervalle (liste) d entiers (en contexte liste) : (n1..n2)

Logique : && and or (priorité plus faible pour ces derniers, peuvent être utilisés en contexte de liste) Opérateurs bit à bit : & ^ Décalage bit à bit : >> << Opérateur intervalle :.. Opérateur conditionnel : condition? 'vrai':'faux' Opérateur déclaration de chaînes : 'texte' "texte" `texte` q{texte} qq{texte} qx{texte}

Accès aux fichiers La fonction open permet de d'initier l'accès à un fichier. Elle prend par défaut trois paramètres : la variable descripteur de fichier, le mode d'ouverture (< > >>), et le nom du fichier (avec chemin éventuellement).open renvoie une valeur fausse en cas d'erreur. Une fois le descripteur de fichier ouvert, on peut lire le fichier avec l'opérateur <>. Pour écrire, on utilise la fonction print, avec le descripteur en premier argument. La fonction close ferme le descripteur de fichier. open (my $in, '<', '/tmp/fichier1.txt'); open (my $out, '>', '/tmp/fichier2.txt'); while (my $ligne=<$in>) { print $out $ligne; } La fonction chomp permet d'éliminer le retour à la ligne, dans les lignes lues.

Fonctions Le mot clé sub permet de déclarer une fonction. Les arguments sont passés à travers la variable globale @_. L'instruction return sort immédiatement de la fonction en renvoyant éventuellement une valeur (scalaire ou liste). La fonction est appelée par son nom, suivi des arguments ; si la fonction n'est pas déclarée avant son appel, il faut ajouter & avant le nom. sub ma_fonction { my ($x, $y, $z) = @_; print "$x $y $z\n"; return "OK!"; } ma_fonction 'Bonjour', 'comment', 'allez-vous?' ; Les fonctions Perl sont récursives. On peut prendre une référence sur une fonction : my $rf = \&ma_fonction;

Expressions rationnelles Encore appelées expressions régulières (regular expressions, regex, pattern matching) : recherche et modifications dans les chaînes de caractères. L'opérateur de recherche est m//, ou simplement // ; il s'applique par défaut à la variable par $_. On peut aussi le lier à une variable quelconque avec l'opérateur =~ (négation!~). Dans le cas le plus simple, on cherche une simple chaîne de caractères, par exemple : if (m/motif/) {... if ($x =~ /motif/) {... Les expressions rationnelles prennent leur sens lorsque le motif contient des méta-caractères (caractères spéciaux) :. (point) correspond à n'importe quel caractère, \d correspond à un chiffre, \D pas un chiffre, \w correspond à caractère alphanumérique ou _, \W au contraire,

\s correspond à un espace (ou retour ligne, ou tabulation), \S pas un espace. ^ correspond au début de ligne, $ correspond à la fin de ligne, indique une alternative (ou). Exemples : /peu\w/; # Correspond à 'peut' 'peur', 'peux' /^\d\d\d$/; # Ligne contenant 3 chiffres exactement On peut aussi définir des classes de caractères : [xyz] l'un quelconque de x, y ou z, [a-z] lettre minuscule, [^ABC] pas A, ni B, ni C. Ainsi que des groupements de caractères avec () : /(a b)b/; # reconnaît 'ab' ou 'bb' /(^a b)c/; # 'ac' au début ou 'bc' /chat(on )/; # reconnaît 'chaton' ou 'chat'. /chat(on(s ) )/; # 'chatons' ou 'chaton' ou 'chat'.

Certains caractères spéciaux permettent d'indiquer une répétition du caractère qui les précèdent : + au moins une fois,? aucune fois ou une seule, * aucune fois ou plusieurs, {n} exactement n fois, {n,} au moins n fois, {n,m} entre n et m fois. Exemples : /peu\w?/; # 'peu', 'peut' 'peur', 'peux' /\d{3}/; # Nombre de 3 chiffres L'opérateur s/// permet d'effectuer une correspondance et une substitution sur la correspondance, par exemple : 'bonjour' =~ s/jour/ne nuit/; # bonjour -> bonne nuit

Les groupements de caractères servent aussi à effectuer des mémorisations ou captures, qui peuvent être réutilisées dans la suite du code en tant que variables $1, $2,... selon l'ordre de la capture. Exemples : if ($t =~ /(\d\d):(\d\d):(\d\d)/) { # format hh:mm:ss $heures = $1; $minutes = $2; $secondes = $3; } Les captures peuvent aussi être utilisées dans la deuxième partie de l'opérateur substitution. Enfin certains modificateurs placés après l'expression changent la reconnaissance, notamment : i insensible à la casse, g global.

Bibliothèque standard (man perlfunc) Scalaires, chaînes de caractères chomp, chop : suppression caractère retour ligne ou dernier caractère, chr, ord : code ASCII <=> caractère chr(65) ; ord('a');. length : longueur chaîne. substr : extraction chaîne. Tableaux Push, pop shift, unshift splice @a, début, fin, @l keys, values : clés d'un dictionnaire ou index d'un tableau + valeurs. Each : en contexte de liste renvoie la clé et la valeur d'un dictionnaire ou l'index et la valeur d'un tableau ; en contexte scalaire, renvoie la clé ou l'index.

Listes split ':', $s ; join ' ', @l ; : découpe la chaîne en fonction du séparateur, ou concatène les éléments du liste avec le séparateur. sort [fonction] @l : classement, alphabétique par défaut, sinon selon la fonction. reverse :renverse la liste. map {block} @l:exécute le bloc pour chaque élément de la liste, $_. qw : retourne une liste de mots. wantarray : impose le contexte liste. Nombres abs, atan2, cos, exp, hex, int, log, oct, rand, sin, sqrt, srand

Fichiers / répertoires chdir, chmod, chown, glob '*.c' ; open, close opendir, readdir, closedir mkdir, rmdir readlink, rename, Stat, Divers eval : considère la chaîne comme du code Perl et l'exécute (si possible!). defined, undef : vérifie l'existence ou détruit une variable. die, exit : fin et renvoie code retour.