Perl

De wikilivois
Aller à la navigationAller à la recherche


http://perldoc.perl.org/

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


Copyright

© 2007-2009 Christophe de Livois

Tête de GNU 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.