Perl
Variables
num alpha == eq != ne
@ tableau $ scalaire #Les variables d'entrées sortie $0 = nom du programme @ARGV contient la liste des paramètres passés en ligne de commande. $ARGV nom du fichier en cours de lecture $ARGV[0] = premier argument @ARGV=liste des arguments $#ARGV nombre d'arguments -1 @_ contient les arguments passés au sous programme en cours (sub). $/ séparateur d'enregistrements en entrée (par défaut: saut de ligne) $\ séparateur d'enregistrement pour la fonction print (vide par défaut) $, séparateur de champs pour la fonction print $. numéro de ligne courant du dernier fichier lu @INC: chemin des modules perls, pour rajouter un chemin : #!/usr/bin/perl -I /usr/local/monys
Les variables d'erreur
$@ message d'erreur du dernier eval() (si vide OK) $! erreur système courante (errno) - utilisé en numérique ou en texte $^E informations d'erreur spécifiques à l'OS sinon $! (linux) $? statut de sortie
Les variables système
$0 nom du programme en train de s'éxecuter $$ n° de process en train de s'éxécuter %ENV variables d'environnement @INC: liste des répertoires où Perl va chercher des modules (do, require ou use)
Les tableaux et hachages
Taille d'un tableau
scalar(@tableau) $#tableau = indice du dernier élément du tableau, = scalar(@tableau)-1 scalar keys %hachage = taille d'une table de hachage $var=undef pour supprimer une variable.
Le hachage
$hash{'nom'}=valeur;
- voir values, keys, sort,delete
- keys(%hachage) donne le tableau des clés du hachage
- values(%hachage) donne le tableau des valeurs du hachage
- delete
le module Tie::Hash permet de travailler sur un hachage lié.
hachage de tableau
utilisation @{ $self->{rrd} }
hachage de hachage
my %FAI; %FAI = ( tele2 => { name => 'tele2', ip => '192.168.1.64', gw => '192.168.1.254', iface => 'eth2', smtp => 'smtp.tele2.fr', }, );
foreach my $acces ( keys %FAI ) { print "$acces :\n"; for my $elem ( keys %{ $FAI{$acces} }) { print "$elem: $FAI{$acces}{$elem}\n" } print "------------\n"; }
Boucles et contrôles
@text=("text1","text2"); foreach $line (@text){}
if{} elsif{} else{} for($i=0;$i<n;$i++){}
Manipulation de fichiers
Lire/Ecrire dans un fichier
$file="test"; open(FILE,"$file") or die "$file: $!"; open(FILE,">$file") # ouverture en écriture foreach(<FILE>) { .... } close(FILE)
Le module File::Path donne la fonction mkpath (équivalent à mkdir -p) mkpath (chemin,0,0777) 0:mkpath n'affiche pas les noms des répertoires de leur création 0777: droits sur le répertoire
renommer un fichier
rename ANCIENNOM, NOUVEAUNOM (détruit nveau nom s'il existe)
- #autoflush
$| si =1 autoflush sur un handle de fichier autre que stdout. Mieux vaut utiliser IO::File et la fonction autoflush(): Mieux vaut utiliser IO::File et la fonction autoflush():
use IO::File; perldoc IO::File $fh = new IO::File; $fh->open("> fichier") or die "Erreur: $!"; $fh->autoflush(1);
Fonctions de traitement de texte
- tr
- substr (EXPR, OFFSET, LONGUEUR)
Expressions rationelles (regexp)
if ($line =~ /regexp/) { do ;} Metacaractères: \|()[]{}^$*+?. | alternative () regroupements $ fin de ligne ^ début de ligne * 0 ou + + 1 ou + ? 0 ou 1
\b limite de mot \r retour chariot \t tabulation \f saut de page \s [ \t\r\n\f] (espace) \S un caractère autre qu'un espace \e echappement \W un caractère ailleurs que dans un mot \w [0-9a-zA-Z_] \w+ recherche de mot
$var =~ tr/A-Z/a-z/; #convertit $var en minuscule
Gestion du temps
($user,$system,$cuser,$csystem) = times; my ($t0) = time; #initial time my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst)=localtime(time); if ($year < 100) { $year+=2000; } else { $year+=1900; } $month++;
Modules et objets
constructeur et destructeur
- new()
- destroy()
methodes
my $self=shift;
- Exemples
package lsi::group; #note :ligne suivante (variable) obligatoire $groupdel="/usr/bin/groupdel" sub new { my ($class, $name, $gid, $users, $type)=@_; my $fileopen=0; my $self = { name => $name, gid => $gid, users => $users, type => $type, fileopen => $fileopen, }; bless $self; return $self; } sub print { my $self=shift; print "$self->{type}:", "$self->{name}:", "$self->{gid}:", "$self->{users}:\n"; }
Modules perl
Options
http://www.aplawrence.com/Unix/perlgetopts.htm
options std
use Getopt::Std; my %opt=(); getopts('h:i',\%opt); -h arg donne $opt{h}=arg; -i donne $opt{i}=1;
options long
use Getopt::long
ex:
&GetOptions("dvi!", "debug!","help","h", "char-size=i","doc-type=s");
les options :
- --dvi donne $opt_dvi=1;
- --nodvi donne $opt_dvi=0;
- --help donne $opt_help=1;
- --char-size=11 donne $opt_char_size=11; (i=integer)
- --doc-type=report donne $opt_doc_type="report"; (s=string)
Gestion du temps
http://datetime.mongueurs.net/Perl/faq.html
Syslog
use Sys::Syslog qw(:DEFAULT setlogsock); sub log { setlogsock('unix'); openlog("check_system",'cons,pid','user'); syslog('notice',@_); closelog(); }
Manipuler les bases de données
DBI: http://search.cpan.org/~timb/DBI/DBI.pm
CONNECT
$dbh = DBI->connect("DBI:$DB_TYPE:database=$db_database;host=$db_server",$db_usercode,$db_password) || die "\nCannot acces s $DB_TYPE server!\n";
SELECT
$sth = $dbh->prepare(q{SELECT id FROM table_name WHERE a=? and b=? }); $rc = $sth->execute($a_value,$b_value)|| die ; ($id) = $sth->fetchrow_array; while ( my @r = $sth->fetchrow_array ){print $r[0];}
INSERT
$sth = $dbh->prepare(q{INSERT INTO summary (year,month) VALUES (?,?)}); $rc = $sth->execute($year,$month);
DELETE
$dbh->prepare(q{DELETE from logs WHERE year=? AND month=? AND ltype=?}); $rc = $sth->execute($year, $month, $ltype) || die "can't delete in DB";
Créer un fichier temporaire sécurisé
Permet de se prémunir des races conditions http://www.perldoc.com/perl5.6/lib/File/Temp.html
use File::Temp qw/ tempfile tempdir /; ($fh, $filename) = tempfile($template); my ($fh, $logtmp) = tempfile("/tmp/monys.XXXXXX"); `cat $file > $logtmp`
Reverse DNS
gethosbyaddr (avec inet_ntoa,inet_aton)
ou
NET::DNS
Net::SNMP
http://search.cpan.org/~dtown/Net-SNMP/lib/Net/SNMP.pm
http://search.cpan.org/~dtown/Net-SNMP-5.2.0/lib/Net/SNMP.pm
my ($session, $error) = Net::SNMP->session( -hostname => $host, -community => $community, ); $session->close;
get
$result = $session->get_request(-varbindlist => [$oid]); print $result->{$oid}, "\n";
get_table
$result = $session->get_table(-baseoid => $boid); foreach my $ooid (keys(%{$session->var_bind_list})) { print "$ooid: $result->{$ooid}\n"; }
rrdtool - RRDs
RRDs::update ($rrdfile, $N); my $ERR=RRDs::error; die "ERROR $ERR\n" if $ERR;
rrdtool::oo
LWP
- http://articles.mongueurs.net/magazines/linuxmag56.html
- http://articles.mongueurs.net/magazines/linuxmag57.html
- http://articles.mongueurs.net/magazines/linuxmag58.html
- http://lwp.interglacial.com/index.html
Copyright
© 2007-2009 Christophe de Livois
Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale. Pour plus d'informations consulter le site de l'APRIL. |