FAQ PerlConsultez toutes les FAQ
Nombre d'auteurs : 18, nombre de questions : 250, dernière mise à jour : 29 octobre 2015 Ajouter une question
Bienvenue sur la FAQ Perl. Cette FAQ a pour vocation de vous enseigner ou de vous faire revoir les notions élémentaires de ce fantastique langage. Perl est très utilisé dans différents domaines depuis la gestion système, le réseaux, l'administration de bases de données, le web (CGI), la bureautique, la conception d'interfaces graphiques ou des contextes scientifiques telle la bioinformatique. Nous espérons que cette FAQ vous sera d'une grande utilité.
Vous souhaitez participer à l'amélioration de cette FAQ, n'hésitez pas !! Commentez
Bonne lecture !
- Comment faire un sleep de moins d'une seconde ?
- Comment désinstaller un module ?
- Comment valider un numéro ISBN ?
- Comment vérifier qu'un numéro SIRET est bien formaté ?
- Comment tester la validité d'une adresse électronique ?
- Comment raboter un texte trop long et ajouter 3 petits points ?
- Convertir un code couleur RGB ou RVB en hexadécimal
- Convertir un code couleur hexadécimal en RVB ou RGB
Pour faire un sleep de moins d'une seconde, il est recommandé d'utiliser le module Time::HiRes qui est disponible dans le core.
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 | #!/usr/bin/perl use strict; use warnings; use Time::HiRes qw ( sleep ); print "Bonjour, je dors\n"; sleep 0.5; # pause d'une demie seconde print "Au revoir\n"; |
Sous Linux ou Mac OS, il n'existe aucun utilitaire permettant de désinstaller un module Perl. Donc, voici un script qui peut vous permet de le faire proprement.
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/usr/bin/perl use strict; use warnings; use ExtUtils::Packlist; use ExtUtils::Installed; $ARGV[0] or die "Usage: $0 Module::Name\n"; my $mod = $ARGV[0]; my $inst = ExtUtils::Installed->new(); foreach my $item (sort($inst->files($mod))) { print "suppression de $item\n"; unlink $item; } my $packfile = $inst->packlist($mod)->packlist_file(); print "suppression de $packfile\n"; unlink $packfile; |
Code : | Sélectionner tout |
ppm uninstall MonModule
Le module Business::ISBN permet de tester la validité d'un numéro ISBN. Il permet également de faire des conversions isbn10 en isbn13 et vice versa. Il est également possible d'afficher le numéro isbn sous différentes formes et de trouver le code publié du numéro ISBN, le pays etc... Vous pouvez même créer un code barre contenant le numéro ISBN. Pour en savoir plus, il vous suffit de lire la documentation du module.
Voici un petit exemple (vous devez installer le module Business::ISBN et GD::Barcode)
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #!/usr/bin/perl use strict; use warnings; use Business::ISBN; my $isbn_camelbook = '2841771407'; my $isbn = Business::ISBN->new($isbn_camelbook); # Test validite if ( $isbn->is_valid ) { print "ISBN : $isbn_camelbook valide\n"; } else { die("ISBN : $isbn_camelbook invalide\n"); } # convert print "ISBN10 : ", $isbn->as_isbn10->as_string, "\n"; print "ISBN13 : ", $isbn->as_isbn13->as_string, "\n"; print "ISBN STRING : ", $isbn->as_string, "\n"; #print the ISBN with hyphens at specified positions. #this not does affect the default positions print "Autre ecriture : ", $isbn->as_string( [] ), "\n"; #print the group code or publisher code print "Groupe code : ", $isbn->group_code, "\n"; print "Groupe : ", $isbn->group, "\n"; print "Code publie : ", $isbn->publisher_code, "\n"; # création d'un code barre de type EAN13 au format png open( PNG, '>', 'codebarre_isbn.png' ); binmode PNG; print PNG $isbn->png_barcode; close(PNG); |
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 | ISBN : 2841771407 valide ISBN10 : 2-84177-140-7 ISBN13 : 978-2-84177-140-0 ISBN STRING : 2-84177-140-7 Autre ecriture : 2841771407 Groupe code : 2 Groupe : French speaking area Code publie : 84177 |
Le numéro SIRET est un identifiant d'établissement. Cet identifiant numérique de 14 chiffres est articulé en deux parties : la première est le numéro SIREN de l'entreprise (ou unité légale ou personne juridique) à laquelle appartient l'unité SIRET ; la seconde, habituellement appelée NIC (Numéro Interne de Classement), se compose d'un numéro d'ordre à quatre chiffres attribué à l'établissement et d'un chiffre de contrôle, qui permet de vérifier la validité de l'ensemble du numéro SIRET.
Il existe un module Business::FR::SIRET permettant de vérifier que le numéro siret est proprement formaté, il ne vérifie absolument pas que la compagnie est existante. Pour cette dernière vérification, il existe des sites web vous permettant de faire la faire.
voici un code d'exemple :
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 | #!/usr/bin/perl use strict; use warnings; use Business::FR::SIRET; my $numero_siret = '54209790203949'; my $c = Business::FR::SIRET->new($numero_siret); print "SIRET ", $c->siret() . " est valide\n" if $c->is_valid(); |
Code : | Sélectionner tout |
SIRET 54209790203949 est valide
Pour tester la validité d'une adresse électronique, inutile de s'acharner à trouver la bonne expression régulière. Il existe des modules perl le faisant pour nous proprement.
Voici un exemple de codes utilisant des modules différents Email::Valid et Mail::CheckUser
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/bin/perl use strict; use warnings; use Email::Valid; my $email = 'toto@my_google.fr'; if ( Email::Valid->address($email) ) { print "Email::Valid => $email valide\n"; } else { print "Email::Valid => $email no, valide\n"; } |
Code : | Sélectionner tout |
Email::Valid => toto@my_google.fr no, valide
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/perl use strict; use warnings; use Mail::CheckUser qw(check_email); $Mail::CheckUser::Timeout = 5; if ( check_email($email) ) { print "Mail::CheckUser => E-mail address <$email> is OK\n"; } else { print "Mail::CheckUser => E-mail address <$email> isn't valid:\n"; } |
Code : | Sélectionner tout |
Mail::CheckUser => E-mail address <toto@my_google.fr> isn't valid:
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #!/usr/bin/perl use strict; use warnings; =for rabot La fonction rabot() rabote une chaîne de caractère à une longueur donnée si la longueur initiale est supérieure. Entrées obligatoires : Chaîne de caractères et Longueur Entrée optionnelle : Booléen (ne coupe pas les mots si vrai) Sortie : Chaîne de caractères résultante =cut print rabot( 'Ceci est un premier exemple de phrase.', 20 ) . "\n"; print rabot( 'Ceci est un second exemple de phrase.', 20, 1 ) . "\n"; sub rabot { my ( $texte, $taille, $coupe ) = @_; unless ($coupe) { $coupe = 0; } if ( length($texte) > $taille ) { # Variante HTML : $suspension = '&hellep;'; my $suspension = '...'; my $ajustement = length($suspension); $texte = substr( $texte, 0, $taille - $ajustement ); $texte =~ s/([^ ,;:\.!\?\(\)])[ ,;:\.!\?\(\)]+[^ ]*$/$1/ if ($coupe); if ($ajustement) { $texte = $texte . $suspension; } } return $texte; } |
Code : | Sélectionner tout |
1 2 | Ceci est un premi... Ceci est un... |
Voici un code Perl qui permet de convertir un code RVB ou RGB (pour les anglais) en hexadécimal 6-digits.
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/perl use warnings; use strict; my ($rouge, $vert, $bleu) = (125, 35, 144); print "$rouge, $vert, $bleu -> ", rvb_to_hexa($rouge, $vert, $bleu), "\n"; sub rvb_to_hexa { my ( $rouge, $vert, $bleu ) = @_; my $hexacolor = sprintf '#%02X%02X%02X', $rouge, $vert, $bleu; return uc $hexacolor; } |
Code : | Sélectionner tout |
125, 35, 144 -> #7D2390
Voici un code Perl qui permet de convertir un code hexadécimal 3-digits ou 6-digits en code RVB ou RGB (pour les anglais).
Code perl : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #!/usr/bin/perl use warnings; use strict; my @CouleurHexa = ( '#896E4A', '#123456', '#2CEAAC', '#FFFFFF', '#000000', '#FF0000', '#7FF'); foreach my $couleur ( @CouleurHexa ) { if ( my ($rouge, $vert, $bleu) = hexa_to_rvb($couleur) ) { print "$couleur -> $rouge, $vert, $bleu\n"; } else { print "$couleur -> introuvable\n"; } } sub hexa_to_rvb { my ($hexacolor) = @_; $hexacolor = uc $hexacolor; $hexacolor =~ s{^#([0-9A-F])([0-9A-F])([0-9A-F])$}{#$1$1$2$2$3$3}; my ( $rouge, $vert, $bleu ) = (); if ( $hexacolor =~ m{^#(?:[0-9A-F]{2}){3}$} ) { $rouge = hex( substr $hexacolor, 1, 2 ); $vert = hex( substr $hexacolor, 3, 2 ); $bleu = hex( substr $hexacolor, 5, 2 ); } else { return; } return ($rouge,$vert,$bleu); } |
Code : | Sélectionner tout |
1 2 3 4 5 6 7 | #896E4A -> 137, 110, 74 #123456 -> 18, 52, 86 #2CEAAC -> 44, 234, 172 #FFFFFF -> 255, 255, 255 #000000 -> 0, 0, 0 #FF0000 -> 255, 0, 0 #7FF -> 119, 255, 255 |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.