8.1 OPENWEB

8.1.1 Quelques rappels sur le WEB

8.1.1.1 Le WEB et son environnement Client-Serveur

Le World Wide Web est un ensemble de clients et de serveurs qui admettent le protocole HTTP, sur Internet.
8.1.1.1.1 Clients et serveurs
Un client est un programme qui demande des informations. Un serveur est un programme qui envoie des informations. Un client peut demander des informations à plusieurs serveurs différents. Un serveur peut fournir des choses à de nombreux clients différents. En général, c'est le client qui engage la conversation avec un serveur. Un protocole permet de définir la manière dont un client doit formuler ses requêtes aux serveurs, et la manière dont les serveurs vont y répondre.
8.1.1.1.2 Clients WEB
Parmi les clients WEB les plus répandus on trouve Netscape et Internet Explorer.

Ce que fait le client :

8.1.1.1.3 Serveurs WEB
Quelques serveurs connus : Apache, NCSA …

Ce que fait le serveur :

8.1.1.1.4 Le dialogue entre un client et un serveur WEB
Le dialogue entre un client et un serveur WEB se déroule de la manière suivante : On dit du WEB qu'il a un protocole sans état, parce que le serveur oublie tout de la transaction effectuée dés qu'il a délivré au client l'information demandée.
8.1.1.1.5 Hypertexte et hypermédia
Un document hypertexte est un fichier texte qui contient des liens vers d'autres parties du document lui-même ou vers d'autres documents. Ces documents peuvent être localisés sur le même ordinateur, mais aussi sur un autre ordinateur du réseau.

Un lien hypertexte est formé par une ancre et par l'adresse du document ciblé. Une ancre peut-être un mot, un groupe de mots ou une image mis en évidence dans le document (caractère gras, couleurs, etc.). Un document référencé par un lien hypertexte peut-être sur un autre serveur WEB, mais aussi sur un serveur FTP, GOPHER, etc. Son adresse doit donc indiquer, entre autres, la méthode d'accès à ce document.

Un document hypermédia est un document hypertexte avec la différence que les liens peuvent également référencer des fichiers son, image ou vidéo.

8.1.1.1.6 Les URLs
Le WEB utilise la technique de l'hypertexte, c'est à dire qu'il utilise les liens entre des documents pouvant être n'importe où sur Internet. L'information contenue dans un lien indique où et comment atteindre la ressource référencée : on parle d'URL (Uniform Ressource Locator). Le format d'un URL est :

Méthode://nom_machine:port/nom_fichier[#ancre\ ?liste_paramètres]

Le champ méthode indique le protocole à utiliser : file, ftp, http, telnet, gopher, wais, news, etc. Celui qui nous intéresse dans ce rapport est principalement le protocole HTTP, utilisé par les serveurs WEB.

Le port est optionnel ; s'il est omis, le navigateur utilise le port standard du service correspondant au protocole. Par exemple, pour HTTP, le port par défaut est 80.

On peut aussi avoir des URLs relatif par rapport au document courant. Cela suppose que le document référencé dans l'URL est localisé sur le même serveur et accessible par le même protocole.

8.1.1.1.7 HTML
La signification littérale de HTML, HyperText Markup Language (Langage de balise hypertexte) est un peu trompeuse. En effet, HTML, n'est pas, à proprement parler un langage de programmation, mais plutôt un ensemble de codes que l'on place dans le texte afin qu'il soit affiché d'une certaine façon par les navigateurs ou qu'il reçoive des attributs spéciaux, comme un lien vers un autre fichier. Pour le serveur HTTP, peu importe le type de navigateur recevant les informations codées en HTML. Tous les navigateurs savent interpréter les codes HTML, et s'en servent pour déterminer la structure du document – quel en est le titre, l'entête, où sont situés les sauts de paragraphe, …

A chaque balise correspond une balise quasi identique. La première balise est dite ouvrante ; la seconde, avec une barre oblique (/) est dite fermante. Tout ce qui se trouve entre une balise ouvrante et la balise fermante correspondante est affectée par la balise ouvrante.

Un document minimal en format HTML comprend les lignes suivantes :

 <HTML>
 <HEAD></HEAD>
 <BODY></BODY>
 </HTML>
Voir mon projet d'IUT pour plus de détails sur les balises HTML.

8.1.1.2 CGI et l'interactivité avec les clients WEB

CGI (Common Gateway Interface) est une norme permettant à un serveur WEB et un programme externe de partager des informations. Lorsque le serveur reçoit de la part d'un client une requête lui demandant d'exécuter un programme (dit script CGI), il résume les informations présentes dans la requête en un ensemble standard de variables d'environnement. Le programme lit ces variables et y trouve des informations permettant de répondre à la requête. De plus, CGI normalise le retour des résultats du programme au serveur, en définissant par exemple le type MIME de la sortie produite par le programme.

Les programmes CGI sont employés pour une tâche requérant une réponse dynamique du serveur. Le premier objectif de CGI est de permettre d'écrire des programmes communiquant avec les navigateurs WEB.

En se servant de CGI, on peut écrire des programmes qui :

Il est possible d'écrire des programmes CGI pratiquement dans n'importe quel langage : C, C++, PERL, ... Les langages interprétés, comme PERL, présentent un avantage pour l'écriture de programmes CGI : ils permettent une manipulation aisée des chaînes de caractères. Ils sont néanmoins plus lents que des langages compilés comme le langage C.

8.1.2 La société Celya

Celya SA, SSII spécialisée dans les services en lignes professionnelles depuis 1992. Cette société possède une filiale commune avec ORT (COD INGENIERIE).
 CELYA SA
 Direction commerciale
 9, rue Alfred Kastler - BP 60762
 44307 - NANTES Cedex 3

8.1.3 OPENWEB et le module preprocesseur de pages HTML OW-CGI

8.1.3.1 Introduction

Dans la suite nous allons décrire le produit de la société Celya : ses objectifs, ses fonctionnalités, et ses différentes composantes.

Ce produit est destiné à faciliter la mise en place d'applications WEB complexes par opposition aux applications hypertexte. Basé sur la norme CGI : il s'interface avec tout type de serveur HTTP utilisant cette norme.

8.1.3.2 Les objectifs du produit

  1. Offrir la possibilité de mémoriser un contexte utilisateur (c'est un ensemble de données se rapportant à un utilisateur) ;   2. Permettre de lancer facilement n'importe quel type de traitement (en C, Shell, Perl, Cobol, etc.) tout en l'interfaçant avec le contexte ;   3. Permettre la mise en place facile de formulaires de saisie HTML, dont les champs sont contrôlés par des procédures prédéfinies en Javascript (pouvant être étendues par les développeurs).   4. Permettre l'accès à des bases de données multiples ;   5. Permettre le traitement des données issues d'une transaction, la gestion de l'affichage en fonction des données ;   6. Utilisation possible avec l'ensemble des serveurs HTTP du marché ;   7. Environnements Windows NT et UNIX ;

8.1.3.3 Architecture générale

8.1.3.4 Les différents modules

OPENWEB est composé d'un ensemble de trois modules :
8.1.3.4.1 Le module OW-CGI
Ce module assure deux fonctions importantes : La gestion des contextes

Une des caractéristiques du WEB est que l'on travaille en mode non connecté. Rien ne permet en standard de reconnaître un utilisateur au cours d'une session de consultation d'un serveur.

Ceci ne pose pas de problème particulier tant qu'il s'agit de créer des services de navigation hypertexte simple. Dès qu'il est nécessaire de saisir de l'information pour pouvoir l'utiliser en un autre point du service les choses se compliquent. Il faut faire appel à des programmes externes ou " promener " des variables saisies dans des URL complexes.

Le système de gestion de contexte d'OPENWEB permet de s'affranchir des manipulations complexes que tout développeur doit mettre en œuvre actuellement.

Pour chaque utilisateur, on mémorise un certain nombre de variables. Ces variables constituent le contexte utilisateur. Cela peut être des données saisies au sein de formulaires, des données concernant ses préférences, ses goûts, … et que l'on est allé chercher dans une base de données en début de session.

Le contexte utilisateur, accessible en mémoire, est sauvegardé dans un fichier ASCII régulièrement mis à jour sur le disque du serveur. Ce fichier est composé d'une ligne par variable, de la forme :

NOM_VARIABLE :VALEUR_VARIABLE

Pour pouvoir gérer un contexte utilisateur il importe de pouvoir identifier et distinguer les utilisateurs d'un service. Il y a deux méthodes :

Interprétation et exécution de code

L'idée du préprocesseur HTML est de centraliser tout le code nécessaire à l'exécution des applications WEB au sein même des pages HTML.

Si une page HTML a besoin d'informations, calculées à partir de programmes spécifiques ou provenant d'une base de données, le lancement de ces programmes et des requêtes peut être réalisé directement dans la page HTML.

Pour cela, le préprocesseur traite un certain nombre de balises, spécifiques au produit, qui sont épurées avant envoi de la page HTML résultante au serveur HTTP.

Dès qu'une balise spécifique est identifiée par le préprocesseur, les instructions qui l'accompagnent sont lues et exécutées. Après quoi le préprocesseur poursuit l'analyse du reste de la page.

La syntaxe est simple puisqu'elle s'inspire directement des tags HTML.

L'exécution séquentielle des différents traitements permet de les enchaîner et d'utiliser dans un traitement le résultat d'un autre.

Les principales fonctionnalités du préprocesseur sont les suivantes :

Les traitements sont effectués par le préprocesseur en relation avec le contexte utilisateur : on peut récupérer et modifier facilement les variables qu'il contient.
8.1.3.4.2 Le module serveur de transactions OW-MIDLLE
Avec OPENWEB, il est possible d'insérer au sein d'une page HTML des requêtes vers des bases de données. Le préprocesseur HTML constituant le module OW-CGI se charge de l'exécuter et d'en récupérer le résultat.

Ceci fait appel à un deuxième module, OW-MIDLLE, dont le rôle est de router les requêtes à destination d'une base qui n'est pas forcément sur la même machine que le serveur HTTP.

Le module OW-MIDDLE est constitué d'un serveur centralisant les demandes d'exécution des requêtes, d'un client demandant au serveur l'exécution des requêtes. Il est complété par un ensemble de modules spécifiques aux différents SGBD auxquels on souhaite pouvoir accéder (Interface des ressources).

Bâti sur le protocole TCP/IP, il est entièrement réparti. Le côté client est indépendant du système distant, il se contente de poster une requête d'un type donné. Un fihier de configuration permet d'identifier les différents serveurs de ressources capables de traiter cette requête. Les modifications de ces configurations sont prises en compte de manière dynamique. La configuration intègre la notion de secours, ce qui permet d'atteindre un second, voir un troisième ou quatrième serveur de ressources dans le cas où les premiers ne répondraient pas.

Au final, le résultat des requêtes est directement intégré dans l'environnement du contexte utilisateur.

8.1.3.4.3 Le module OW-SDK
Le serveur du module OW-MIDDLE s'accompagne d'une librairie de développement C (OW-SDK) permettant d'intégrer à un applicatif des fonctions de client ou de développer une interface spécifique.

8.1.3.5 Le module préprocesseur HTML OW-CGI

Le module préprocesseur HTML OW-CGI, composé des programmes owparse et owparseurl, permet de regrouper dans un même fichier source du code HTML et un ensemble d'instructions. Il interprète du code, comme perl, ksh, … L'exécute, et génère des documents en format HTML.
8.1.3.5.1 Principe du préprocesseur
Avec OW-CGI, chaque fichier d'une application WEB est un script CGI faisant appel au programme exécutable owparse.

Le programme owparse interprète l'ensemble des lignes de code du script :

8.1.3.5.2 Recherche de balises spécifiques au sein d'une page
Le programme owparse sait reconnaître les balises suivantes : En dehors de ces balises, le code HTML est analysé, les variables de la forme %var% rencontrées sont remplacées par leur valeur.

8.1.3.6 Le module d'accès a des bases de données OW-MIDDLE

Le module OW-MIDDLE est un serveur de transactions de type middleware. Il permet au module OW-PARSE ou à tout autre client, d'accéder à des transactions particulières. Composé du programme owmiddle, ce module un accès à des bases de données : par l'intermédiaire de (programmes) serveurs de requêtes, ainsi que des connexions à des sites centraux.

Pour pouvoir utiliser OW-MIDDLE il suffit de le lancer sur une machine reliée avec celle qui sert de serveur HTTP.

On configure OW-MIDDLE par l'intermédiaire du fichier owmiddle.conf, et on peut également le paramétrer par la ligne de commande. Ce qui permet d'avoir plusieurs configurations sur le même poste.

8.1.3.7 Le module kit de développement OW-SDK

Le module OW-SDK est un kit de développement permettant de développer un serveur ou un client. Il est constitué d'un ensemble de librairies C qui permettent de développer des accès au middleware, d'utiliser des fonctions de traitement HTML, ...

8.2 FULCRUM SearchServer (version 3.5)

8.2.1 FULCRUM, la société

La société canadienne Fulcrum Technologies est un des principaux éditeurs de logiciels de recherche d'informations pour l'entreprise étendue. Les logiciels de Fulcrum facilitent l'accès à la connaissance et au savoir-faire de l'entreprise, stockés sous forme électronique, que ce soit via des réseaux, sur CD-ROM, sur Internet ou encore sur des sites World Wide Web. Parmi les clients de Fulcrum, citons l'AFP, Banca di Roma, Cap Gemini, L'Express, Fujitsu, Microsoft, Novell, .... Basée à Ottawa (Canada), Fulcrum est fortement implantée en Europe, avec un siège européen en France, et des bureaux en Allemagne, en Belgique, en Grande-Bretagne et en Italie. La société est cotée au Nasdaq (symbole FULCF) et à la bourse de Toronto (symbole FUL).

8.2.2 FULCRUM SearchServer

SearchServer est un puissant moteur d'indexation et de recherche, évolutif et multi plate-forme.

Dans le monde, plus de 800 sociétés ont déjà fait appel à SearchServer pour bâtir des applications stratégiques novatrices.

Les fonctions évoluées de recherche documentaire de SearchServer constituent certainement le chemin le plus direct vers la connaissance, tandis que le support des langues internationales autorise la recherche dans la plupart des langues européennes, ainsi qu'en japonais et en coréen.

Grâce à ses interfaces basées sur des standards ouverts, les développeurs peuvent facilement personnaliser les applications pour les environnements Web et client-serveur.

8.2.3 Utilisation de execsql

Execsql est un outil pour l'administration et pour exécuter des requêtes SQL SearchServer.

8.2.3.1 Introduction

Execsql est un utilitaire en ligne de commande que l'on peut utiliser pour exécuter des requêtes SearchSQL et éxecuter des scripts. Il est possible d'administrer, de modifier et de maintenir les tables avec cet outil. Un exemple d'utilisation est la création d'un script qui crée une table, insère des données dedans, puis index la table.

Toutes les requêtes et scripts doivent se conformer à la syntaxe et la grammaire du langage SearchSQL.

8.2.3.2 Utiliser execsql

La syntaxe pour lancer execsql est la suivante :
     execsql [-h<servername>] [-0infilename>]

Les paramètres signifient :

     -hservername>
Permet de se connecter au serveur nommé. Si le serveur n'est pas spécifié execsql utilise le serveur spécifié dans la variable FTNPATH.
     -0infilename>
Permet d'executer le script infilename, mais si l'option -0 'est pas spécifié l'entrée standard est utilisé et on peut alors entrer des commandes SearchSQL au clavier, pour sortir taper (CTRL+D).

8.2.3.3 Créer et lancer un script

Pour l'exemple, on va lancer le script tbls.fte qui va retourner la liste des noms de table utilisables.
 
  prompt> more tbls.fte 
  select table_qualifier, table_name, table_type, ftt_location from tables;
  prompt> execsql -0tbls.fte
  select table_qualifier, table_name, table_type, ftt_location from tables;
  CursorName = SQL_CUR00001
  RowCount = 2
  NumResultCols = 4: TABLE_QUALIFIER, TABLE_NAME, TABLE_TYPE, FTT_LOCATION
  values:
  ('/projets/NACP/dev/base', 'ACTIVITE', 'TABLE', '/projets/NACP/dev/base')
  ('/projets/NACP/dev/base', 'NACPAUTO', 'TABLE', '/projets/NACP/dev/base')
  ***
  prompt>

8.2.3.4 Utiliser un script pour créer la table SUPPORT

Nous allons voir comment utiliser execsql pour créer, insérer, et indexer une table.

Les fichiers d'exemple et leur résultat sont listés dans le chapitre Listing.

8.2.3.4.1 Création de la table SUPPORT
Pour créer la table SUPPORT taper :
execsql -0crs001.fte
8.2.3.4.2 Utiliser la ligne de commande pour exécuter des requêtes
Pour insérer des données dans la table taper :
execsql -0ins001.fte
8.2.3.4.3 Indexer la table SUPPORT
Pour indexer la table taper :
execsql -0val001.fte
8.2.3.4.4 Le modèle de données de SearchServer
SearchServer contient deux modèles de données.

Le premier est une abstraction de l'objet texte dont l'application a besoin. Ce modèle est appelé modèle de données logiques et ils s'occupent des schémas, tables, lignes, colonnes, zones et domaines.

Le second, appelé le modèle de données physiques permet de gérer les fichiers de table, et les documents externes qui sont références dans un administrateur de données.

8.2.3.5 Le modèle de données logiques

Les données sont organisés dans SearchServer pour optimiser la puissance et la souplesse des opérations de recherche textuel. Le modèle de données est proche de la programmation SQL, où les données sont organisés sous forme de lignes et colonnes. Nous allons maintenant voir les termes qui permettent de définir ce modèle.
8.2.3.5.1 Data Source
Une source de données est un ensemble de tables qui sont liées à un driver d'accès aux données. Par exemple une session peut être lié a une connexion unique pour une source de données, mais des connexions multiples sont possible.

Chaque source de données fait référence à un driver, des tables et des fichiers de support.

8.2.3.5.2 Table
Une table est composé de lignes et de colonnes, qui représentent la façon dont sont organisées les données pour la mise à jour et les fonctions de recherche. Une ligne représente un objet texte, ou un document, et ses attributs, alors qu'une colonne représente un attribut retrouvable individuellement (par exemple le titre d'un mémo).

Le modèle table couvre 4 classes de structures de données :

8.2.3.5.3 Shema
Le schéma ou dictionnaire de données est un description logique des données qui sont inclues dans une table. L'ordre CREATE SCHEMA permet de définir une table, ses colonnes, l'attribut des colonnes, les zones et domaines.
8.2.3.5.4 Row
Une ligne est un ensemble de valeurs dans une table qui contient une valeur pour chaque colonne.

La façon de diviser les objets texte sous forme d'intérêt dans les documents associés peut être différent selon les applications.

8.2.3.5.5 Column
A la création d'une table, il faut définir les colonnes. Chaque colonne contient ces attributs : Une colonne peut représenter : Objet texte externe :

L'objet texte externe contient le texte externe qui représente le corps d'un document. Le texte externe n'est pas enregistré par SearchServer, mais il est stocké dans son format d'origine.

Des lecteurs de texte sont utilisé pour lire les textes externes durant l'indexation et la recherche de données. Les documents externe peuvent être dans différents formats, également des formats propriétaires, formats de traitements de texte, or au format ascii.

Toutes les informations résultant d'une recherche que l'on souhaite représenter à l'utilisateur doivent être stocké dans une table pour obtenir un fonctionnement efficace. Il est possible d'utiliser les colonnes internes (celles qui ne sont pas des colonnes externes) pour stocker des informations qui ne seront pas utilisé pour la recherche.

Dans le contexte de la recherche de document, les colonnes internes contiennent des informations sur les colonnes externes, aussi elles peuvent être utilisé pour autre chose.

8.2.3.5.6 Zone
Les zones permettent de spécifier des régions de texte dans une colonne, comme le nom d'un chapitre, pour les distinguer du reste du texte pour la recherche. Comme chaque colonne de texte peut être divisé en zones, on peut améliorer la recherche en effectuant la recherche sur les zones plutôt que sur les colonnes.

Cela améliore la recherche de diviser le texte du document en différentes zones. Par exemple, un terme est plus significatif s'il se trouve dans un titre plutôt que dans le corps du texte.

Une colonne qui est divisé en zones est appelé segmented column. Dans la plupart des cas, seulement le texte de la colonne externe est segmenté.

L'étendue d'une zone est déterminé lors de l'indexation de la table. L'étendue de chaque zone est définie par des tags qui sont insérés dans le flux de texte par un lecteur de texte ou mis à l'intérieur du texte en utilisant une autre méthode.

8.2.3.5.7 Domain
Un domaine est un type de donnée défini par l'utilisateur qui utilise des types de données prédéfini. Les domaines sont utiles pour associer des zones à une colonne, ou pour redéfinir le mode d'indexation d'une colonne. Ils peuvent être aussi utilisé pour redéfinir la longueur des données.

On crée un domaine avec l'ordre CREATE DOMAIN.

8.2.3.6 Le modèle physique de données

Les données sont organisées physiquement dans SearchServer pour optimiser la recherche. Le modèle physique de données contient les fichiers ODBC, les fichiers de management de table, les fichiers de support de table, et les documents externe.
8.2.3.6.1 Les fichiers ODBC
Chaque système client contient 2 fichiers ODBC :
8.2.3.6.2 Les fichiers de management de table
Chaque table est associée à un ensemble de fichiers de management de tables qui permettent à SearchServer d'organiser et d'accéder aux données à chercher.

Ces fichiers sont :

Les informations d'indexation sont maintenus dans la table de management des fichiers d'index. SearchServer met en relation cette information en référençant la position exacte de tous les mots qui font parties des données de recherche. Donc une grande table a une grande table de management de fichiers.

A part le fichier de configuration et l'index de fichier de log, tous sont des fichiers texte déstructuré, la table de management des fichiers est un binaire uniquement lisible par SearchServer. Mais ces binaires sont inter-plateformes, c'est à dire qu'ils sont utilisables sur différentes plates-formes.

8.2.3.6.3 Table de fichier de support
La table de fichiers de support permet d'étendre les opérations de SearchServer. Ces fichiers sont partagés par plusieurs tables. Ces fichiers sont :

8.2.4 Le langage SearchSql

8.2.4.1 Les types de données

8.2.4.1.1 type caractère
8.2.4.1.2 type numérique et dates

8.2.4.2 Définition des données

8.2.4.2.1 ALTER TABLE
Ajoute ou efface une colonne dans un schéma existant.
8.2.4.2.2 CREATE SHEMA
Crée d'un schéma pour une table ou modification du schéma pour une table existante.
8.2.4.2.3 CREATE TABLE
Crée une table.
8.2.4.2.4 DROP TABLE
Efface une table existante.
8.2.4.2.5 PROTECT TABLE
Protège une table contre l'indexation, une modification du schéma et un effacement.
8.2.4.2.6 UNPROTECT TABLE
Permet l'indexation, une modification du schéma et un effacement de la table.
8.2.4.2.7 VALIDATE INDEX
Met à jour l'index d'une table.

8.2.4.3 Manipulation des données

8.2.4.3.1 INSERT
Insère de nouvelles lignes dans la table.
8.2.4.3.2 UPDATE
Met à jour les valeurs de la table de la colonne sélectionné.
8.2.4.3.3 DELETE
Efface des lignes dans la table.

8.2.4.4 Recherche des données

8.2.4.4.1 SELECT
Cherche dans une ou plusieurs tables en spécifiant les colonnes et les lignes à chercher et affiche un résultat ordonné du résultat.
8.2.4.4.2 CREATE TEXT_VECTOR
Prépare le texte source à utiliser pour la recherche intuitive.
8.2.4.4.3 SET
Règle les options sur une source de données spécifique pour les requêtes qui suivent pendant la durée d'une connexion.

8.3 Le Langage PERL

8.3.1 Introduction

Le terme Perl est en fait un acronyme. Il vient de la compression de l'expression anglophone Practical Extraction and Report Language. En ce sens, Perl est un langage de programmation orienté objet qui permet l'extraction et le traitement rapide d'informations.

Ce qui fait le succès de Perl, c'est sa grande flexibilité. En effet, il couvre un vaste éventail de possibilités. Alors d'un côté il permet un développement rapide à haut niveau d'abstraction, de l'autre il offre aussi différents moyens pour se rapprocher vraiment du côté matériel de la machine. En gros, Perl est souple et présente des avantages pour presque tous les niveaux de programmation.

De plus, Perl est très portable. Il est aujourd'hui possible de le retrouver non seulement sur les stations Unix d'origine, mais aussi en environnement Windows (dont 95 et NT) ou même DOS. Cette grande portabilité est principalement due à sa façon de fonctionner.

8.3.2 Syntaxe de base

En Perl, l'écriture d'un script se rapproche de celle d'un shell script, ou du C.

Premièrement, la disposition du code a peu d'importance, si ce n'est que pour faciliter la lisibilité, un des aspects d'un bon programme. Aussi, les espaces (ou blancs) ne sont pas pris en charge, ce qui permet de faire des indentations et de sauter des lignes. Ainsi, en aérant bien un programme, on peut rendre ce dernier plus agréable à "débugger"!

Deuxièmement, chaque ligne de commande doit se terminer par un point virgule, tout comme en Pascal et en C.

Le dièse (#) est utilisé pour introduire des commentaires. Sur une même ligne, tout ce qui se trouve à la droite du dièse sera ignoré lors de l'interprétation. Toutefois, il existe une exception à cette règle pour ce qui est de la première ligne de code d'un programme. En effet, cette dernière permet de spécifier le chemin (path) menant au compilateur Perl. En indiquant correctement l'emplacement du compilateur, il suffit ensuite de rendre le script exécutable pour pouvoir lancer ce dernier.

L'exemple qui suit met en évidence les éléments présentés plus haut:

     #!/usr/bin/perl 
     # Début du programme à proprement parler 
     $phrase = 'Mon premier programme en Perl';
     # Ici, la variable phrase contient "Mon premier programme en Perl" 
     print $phrase;
     # Affichage de la phrase 
     # Fin du programme 

Ce petit programme illustre bien la simplicité du langage Perl. Ici, une phrase est attribuée la variable phrase (le $ sert à identifier la variable, nous aborderons ce point à la prochaine section). Cette variable est ensuite affichée à la sortie standard par la commande print.

Comme tous les langages, Perl offre la possibilité d'utiliser un ensemble de commandes déjà définies pour vous. La syntaxe générale des commandes du langage Perl suit habituellement les règles suivantes:

8.3.3 Variables scalaires

Le type de variable le plus simple en Perl est la variable scalaire. Elles peuvent contenir du texte et des nombres, et il faut noter que les nombres et les chaînes de caractères sont parfaitement interchangeables. Par exemple

  $priorite = 9;

affecte 9 à la variable scalaire $priorite, mais on aura pu lui assigner

   $priority = 'grand';

et encore :

   $priorite = '9';
   $priorite = '0009';

tout en ayant toujours accès aux fonctions arithmétiques.

En général, les noms des variables sont composés de chiffres, lettres et souligné (_), mais ils ne doivent pas commencer par un chiffre, et la variable $_ est réservée, comme nous le verrons plus tard. Par ailleurs, le Perl est sensible à la casse, donc $a et $A sont deux variables distinctes.

8.3.4 Tableaux de valeurs

Un type de variable nettement plus intéressant est le tableau de valeur : c'est en fait une liste de valeur (i.e. des nombres et des chaînes de caractères). Les tableaux de valeurs on le même format que les variables scalaires, au détail près qu'ils sont préfixés par le symbole @. Les instructions suivantes :

   @fruits  = ("pommes", "poires", "cerises");
   @musique = ("pipo", "violon");

affectent une liste de trois éléments à la variable tableau @fruits, et une liste de deux éléments à la variable tableau @musique.

On accède aux éléments d'un tableau en utilisant des indices entre crochets. Les indices commencent à 0. L'expression suivante :

   $fruits[2]

renvoie "cerises". On notera que l'@ est devenu un $, étant doné que "cerises" est un scalaire.

8.3.5 Expressions régulières

Une expression régulière est contenue par des slash "/", et l'appariement intervient avec l'utilisation d'un opérateur =~ . Les expressions suivantes sont vraies si la chaine $phrase contient la chaîne le :

   $phrase =~ /le/

Les ER sont sensible à la casse (lettre majuscule, minuscule). Par exemple si-

   $phrase = "Le petit chat gris";

alors, l'ER sera fausse. L'opérateur !~ est utilisé pour un non-appariement. Avec la chaîne ci-dessus,

   $phrase !~ /le/

est vraie, car le n'apparait pas dans $phrase (C'est Le qui apparait).

La variable spéciale $_:

On pourrait avoir la condition :

   if ($phrase =~ /pas/)
   {
 	  print "Nous parlons de rugby.\n";
   }

qui serait vraie pour les cas suivant :

   $phrase = "Une marque de pas.";
   $phrase = "Il s'est surpassé.";

Mais souvent, il est plus facile d'affecter une chaîne à la variable spéciale $_ qui est bien sûr scalaire. Si nous faisons ça, nous pouvons éviter d'utiliser les opérateurs =~ et !~, et le programme ci-dessus peut être réécrit par :

   if (/pas/)
   {
    	print "Nous parlons de rugby.\n";
   }

La variable $_ est la variable pas défaut de nombreuses fonctions Perl, et tend à être utilisé très souvent.

8.3.6 Notions avancées sur les ER

Avec les ER, il y a énormément de caractères spéciaux, et ce sont eux qui leur dont à la fois leur puissance et leur aspect cabalistique.

Voici quelques caractères spéciaux, et leur signification.

 
 .	# N'importe quel caractère, excepté les retours chariot.
 ^	# Un début de ligne ou de chaîne.
 $	# La fin d'une ligne ou d'une chaîne.
 *	# Zéro ou plus du dernier caractère.
 +	# Un ou plus du dernier caractère.
 ?	# Zéro ou un dernier caractère.