vendredi 9 octobre 2009
Script perl : Tester une connexion via un telnet en perl
J'ai trouvé ce script sur un forum. Son but est d'effectuer un telnet en prenant comme paramètre une IP et un port. Ce qui est génial c'est qu'il gère les timeout, alors que si vous faîtes le test en ligne de commande vous pouvez attendre plusieurs minutes avant d'avoir une réponse.
Ce qui est intéressant c'est qu'en gérant les timeout, ce script perl peut être intégré dans un outil de monitoring comme zabbix. En effet, le serveur zabbix a un timeout de 30 secondes maximum, ce qui implique un problème de récupération des données sur le master.
Ci-dessous le script en question :
#!/bin/perl
use Net::Ping;
my ($host,$port)=(shift,shift);
my $timeout=5;
$p = Net::Ping->new("tcp", $timeout);
$p->{port_num} = $port;
$ret=$p->ping($host);
# 0=ok, 1=non joignable
undef($p);
exit($ret==0);
Appel du script :
testTelnet.pl IP Port
lundi 26 novembre 2007
Comment utiliser des constantes définies dans des librairies externes en PERL?
Pour rendre vos programmes perl génériques et faciliter leur maintenance, vous devez centraliser la définition de vos constantes dans un seul fichier .pm.
Imaginons qu'une constante soit définie dans une librairie perl constante.pm :
package constante;
our $Host="myHost";
Comment l'utiliser dans d'autres programmes perl (.pl) ?
$maClasse->{host} = $const::myHost;
N'oubliez pas au préalable d'inclure le fichier où est défini la constante :
use constante;
Récupération des arguments passés à une fonction PERL
Pour récupérer les arguments passés à une fonction PERL :
$ret = $maClasse->maFonction(param1,param2);
Utilisez le tableau @_ :
sub maFonction
{
my ($this,$param1,$param2)=@_;
#suite du code
}
Récupération des arguments passés à un programme PERL
Pour récupérer des arguments passés à un programme perl :
prog.pl param1 param2 param3
vous utilisez le tableau @ARGV :
sub main
{
local ($param1, $param2, $param3)=@ARGV;
#suite de votre code
}
Valider le format du nom d'un fichier en PERL
Comment être sûr que le nom d'un fichier saisi par l'utilisateur est correct en PERL ?
Si comme moi vous cherchez la facilité et voulez utiliser une expression régulière sûre et efficace, ci-dessous le bout de code à utiliser :
unless($fileName =~ m#([\w.-]+)$#)
{
print "Filename '$fileName' incorrect \n";
exit;
}
PERL : récupérer la saisie d'un utilisateur
Comment récupérer facilement en quelques lignes ce qu'un utilisateur saisit à l'écran? Comment développer rapidement un programme perl interactif, ci-dessous en trois lignes ce que vous devez savoir :
Ex d'un programme permettant de sauvegarder une base de données en demandant à l'utilisateur le nom de la base à sauvegarder :
#Afficher un texte à l'écran :
print("Nom de la base à sauvegarder\n");
#Récupérer ce que l'utilisateur a saisi
chop(my $baseName= <STDIN>);
#Effacer l'écran
system("clear");
#suite de votre traitement
$backup->do($baseName);
FindBin : module perl pour l'utilisation de chemins relatifs
Pour permettre l'utilisation de vos scripts perl sur n'importe quel arborescence, tâchez d'utiliser les chemins relatifs lorsque vous développez.
Une solution simple est d'utiliser FindBin, voilà comment procéder :
ex : prog.pl
#!/usr/bin/perl
use FindBin;
use lib "$FindBin::Bin/../lib";
use Init; #Appel de la librairie Init.pm figurant dans le répertoire lib
#suite de votre code
ex : Init.pm
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use FindBin;
package Init;
#suite de votre code
Documentation PERL
jeudi 15 mars 2007
Manipulation de table de hachage en perl
Comment parcourir une table de hachage en PERL?
my %hash = (
'Nom'=>'Madison',
'Prénom'=>'Marie',
'Adresse'=>'10 rue de Paris',
'Ville'=>'Paris',
'Code Postal'=>'75002'
);
Le parcours s'effectue avec la fonction each.
while(($key,$value) = each %hash){
print "clé:$key -- valeur : $value";
}
Comment ajouter des éléments dans une table de hachage?
$hash{"Telephone"} = "0145869820";
Comment passer une table de hachage en paramètre à une fonction ?
Appel de la fonction, passer en référence la table de hachage en utilisant \:
$test->fonctionTest(\%hash);
Récupération de la table de hachage dans la fonction en le déférençant:
sub fonctionTest{
#récupération des arguments de la fonction
my ($this,$refHash) = @_;
#déférencement de la référence en utilisant %
while(($key,$value) = each %$refHash){
print $key."---".$value."\n";
}
}
vendredi 16 février 2007
Sauvegarde de la structure d'une base avec mysqldump et PERL
Commande à utiliser dans un script PERL
system("mysqldump --tab=".$repSauvegarde." ".$nomBase." --opt --no-data");
Cette commande sauvegarde la structure de la base passée en paramètre : $nomBase. Cela va produire autant de fichiers SQL que vous avez de tables, de plus cette commande va créer un fichier supplémentaire avec le nom de la base de données $nomBase.
Ces fichiers sont importants si vous voulez exporter la structure des tables d'une base à une autre. En effet, ce sont des fichiers SQL de création de tables.
Exemple d'un fichier SQL généré :
DROP TABLE IF EXISTS `TABLE_TEST`;
CREATE TABLE `TABLE_TEST` (
`ID` int(20) NOT NULL auto_increment,
`NAME` varchar(20) NOT NULL,
`MAIL` varchar(20) NOT NULL,
PRIMARY KEY (`ID`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='TABLE TEST';
Vous pouvez maintenant exécuter ces fichiers directement dans MySQL.
Date du jour en PERL
Petite astuce rapide : récupérer la date du jour en PERL
use POSIX qw(strftime);
my $date = strftime "%d-%m-%y", localtime;
print my $date;
Affiche 16-02-07.
Pour en savoir plus : localtime







