Obligement - L'Amiga au maximum

Jeudi 29 juin 2017 - 05:48  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Soutien

N'hésitez pas à soutenir le projet Obligement



Contact

David Brunet

Courriel

 


Programmation : Initiation à Perl
(Article écrit par Pierre Girard et extrait d'ANews - novembre 1999)


Perl est un langage interprété, écrit à l'origine par Larry Wall. Sa syntaxe est à la fois proche du C et de divers outils Unix de traitement de fichiers textes comme awk, sed et sh. Si cela ne vous dit rien, ce n'est pas grave.

Vous l'aurez compris, Perl est le langage idéal pour tout ce qui touche de près ou de loin au traitement du texte (pas Word, ni Final Writer...).

Mais ce langage s'est beaucoup développé et de nombreux modules externes ont vu le jour permettant de créer des applications puissantes en quelques lignes. On peut par exemple faire un petit script pour se connecter à Internet, récupérer des fichiers par FTP sans rien entrer (même pas le mot de passe) et ceci en moins de 30 lignes.

S'agissant d'un article de présentation, ne vous étonnez pas de trouver des notions incomplètes ou même passées sous silence. Le but de cet article est de vous intéresser à Perl et de vous montrer son utilité. Donc, installons-le et essayons ensemble.

Installation

Il vous faudra tout d'abord récupérer la dernière version 5.004 qui se trouve sur Aminet.

Les différents fichiers sont archivés avec lha. Je pense que vous devez connaître. ;-)

Pour ceux qui ont beaucoup de mémoire, on va tout décompresser en RAM. Sinon, vous n'avez qu'à remplacer "RAM:" par votre disque dur ("DH0:" par exemple).

Donc tapons "cd ram:" puis "lha x perl-5.004-bin.lha".

Vous vous retrouvez maintenant avec une archive en tar. Il vous faut récupérer Gnutar, créer un répertoire (dh0:ade/perl par exemple), se placer dedans et taper "tar xvf nom_complet_de_l'archive".

Rajoutez un "path" dans la shell-startup (dans votre répertoire s:, éditez le fichier et rajoutez simplement PATH dh0:ade/perl ADD), installez la ixemul.library et voilà votre Perl est fonctionnel.

Il vous faut savoir que les fichiers Perl commencent tous par "#!perl". L'intérêt est qu'après avoir rendu le script exécutable ("protect nom_du_fichier +s"), on peut le lancer directement, comme une véritable commande Shell, c'est-à-dire sans taper "perl nom_du_fichier".

Premier programme

Pour un premier programme, nous allons faire simple. Un petit helloworld ?

#!perl
#HelloWorld
print "helloworld\n";

C'était pas trop compliqué, vous suivez toujours ? Il faut quand même noter le point-virgule à la fin de la ligne qui est obligatoire et le symbole "#" qui permet d'insérer des commentaires. Continuons avec la base de tout programme, à savoir les structures de contrôle.

#!perl
if($prenom eq "Pierre")
	{
		print "bonjour, Pierre\n" ;
		print "ça va?\n";
	}
else
	{print "au revoir"}

Ceci est une structure de contrôle simple du type : if(EXPR) BLOC else BLOC.

On peut aussi utiliser :

while (EXPR) BLOC
for (EXPR; EXPR; EXPR) BLOC
foreach VAR(ARRAY) BLOC

Avec tout ça, on peut déjà faire beaucoup de choses.

Les expressions régulières

Mais de quoi parle-t-il donc ? Le terme "expressions régulières" est une traduction littérale de l'anglais "regular expressions". Je ne vais pas tenter de faire une traduction hasardeuse, mais plutôt vous expliquer de quoi il s'agit.

C'est un des points forts de Perl. Une expression régulière est une suite de caractères respectant une syntaxe particulière et décrivant le contenu d'une chaîne de caractères. Son but est de pouvoir tester si cette dernière correspond à un motif, d'en extraire les informations ou d'y effectuer des substitutions. Si vous n'avez rien compris, c'est normal ;-). Pour comprendre le fonctionnement, il faut le voir à l'oeuvre :

$variable=~s/petit/grand/gi

Cette ligne de commande permet de substituer au sein de la chaîne de caractères $variable, le motif "petit" par "grand".

Les deux lettres à la fin de l'expression signifient que l'on remplace toutes les occurrences (le "g" veut dire global) et que l'on ne tient pas compte de la casse ("i" signifie case-insensitive). Si l'on remplace le "s" du début de la chaîne par un "m", on effectue une recherche sans substitution. Je ne vais pas vous décrire toutes les possibilités, étant donné que mon but n'est pas de me substituer à la documentation de Perl.

A partir de là, les possibilités sont infinies. On peut imaginer faire un programme de translation de caractères ASCII, comme par exemple une conversion de caractères accentués (PC ou Mac) vers des caractères accentués spécifiques à AmigaOS. Il suffit de savoir ce que l'on recherche, par exemple le caractère "é" sur un Macintosh qui correspond en ASCII à 142 (en Perl \x8e en hexadécimal), et de le remplacer par "é". Imaginons que $variable corresponde à une ligne de notre fichier à traiter. Cela donne : $variable=~s/\x8e/é/g.

Cela peut paraître abstrait comme cela, mais avec un peu d'expérience, on a du mal à s'en passer.

Un programme, un programme

Je ne vais pas vous proposer de réaliser un petit programme pour créer des colliers…de Perl (désolé...) mais il est vrai que sans rentrer dans les détails, un petit bout de code vous permettra de mieux voir la structure d'un programme. Mettons en pratique les quelques points que nous avons vu dans cette succincte présentation.

Nous allons donc créer un programme qui prend un fichier ASCII standard en entrée, effectue une conversion, histoire de sortir les retours chariots en trop et autres espaces inutiles et sauve les modifications dans un fichier "au kilomètre", sous un autre nom.

Le source du programme se trouve ci-après, il est évidemment conçu pour les fichiers "textes" qui se prêtent à une utilisation dans un traitement de texte.

#!perl
#Programme de traitement de fichiers ascii


$fichieroriginal=$ARGV[0];	# premier argument après la commande
$fichiermodif=$fichieroriginal."2";

# ouverture du fichier
open (FILE,$fichieroriginal) or die "Impossible d'ouvrir le fichier:\n$!";
@fichier=<FILE>;
close (FILE);

$bloc="";

foreach $ligne (@fichier)	 #on colle les lignes ensemble pour n'en faire qu'une
	{
		$ligne=remove_right_spaces($ligne);   #utilisation d'une sous-routine
		$bloc=$bloc.$ligne;	# le "." sert à la concaténation
	}


$bloc=~s/\.\n+/\.°/g;	# un point et un linefeed = un paragraphe
$bloc=~s/\:\n+/\:°/g;	# pareil pour ":" et ";"
$bloc=~s/\;\n+/\;°/g;
$bloc=~s/\n{2,}/°/g;	# on remplace les linefeeds (au moins 2) par °
$bloc=~s/\n/ /g;		# on remplace les linefeeds qui restent par " "
$bloc=~s/°/\n/g;		# on remet les linefeeds pour les paragraphes

@paragraphes=split(/\x10/,$bloc);	 #on splite les paragraphes.


# sauvegarde
open (FILE,">$fichiermodif") or die "Impossible d'ouvrir le fichier à sauver:\n$!";

foreach $resultat (@paragraphes)	 #sauvegarde de tous les paragraphes
  {
	print FILE $resultat;
  }
close (FILE);
print "Fichier modifié et sauvé sous le nom: $fichiermodif\n";



sub remove_right_spaces	 #on sort tous les espaces à droite de la ligne
	{
		my $var=shift;
		$var=~s/ +$//g;
		return $var;
	}

Essayez avec un fichier quelconque (startup-sequence...) et vous comprendrez ce que je veux dire, étant donné que notre programme s'appuie sur la ponctuation pour créer des paragraphes.

Déjà la fin ?

Perl est un langage puissant qui est très orienté texte, même si l'on peut à peu près tout programmer avec. Il peut vous permettre de réaliser des petits programmes améliorant ou remplaçant la plupart des commandes d'AmigaOS. Il est très facile de refaire la commande "copy", ou "dir" en Perl.

Je n'ai malheureusement pas eu le temps de tester les différents modules externes afin de savoir s'ils marchent sur l'Amiga. Logiquement, les modules n'appelant pas le matériel ou les bibliothèques de fonctions spécifiques à chaque machine doivent marcher. N'espérez quand même pas lancer une interface en Gtk. ;-)

Mais la grande force de Perl réside dans le fait qu'associé à Apache, il vous permet de faire tourner un serveur Web sur votre Amiga. A vous les joies des CGI et autres traitements de fonctions avancées du Web.

Si d'ailleurs quelqu'un a expérimenté la création d'un serveur uniquement à base d'Amiga, qu'il me contacte et nous ferons peut-être un article Apache+Perl. En attendant, si cet article vous a intéressé ou si vous voulez en savoir plus sur Perl, écrivez au journal. Qui sait ? Peut-être verra-t-on un de ces jours dans ANews : Perl, le retour.


[Retour en haut] / [Retour aux articles]