Outils pour utilisateurs

Outils du site


programmation_perl

Ceci est une ancienne révision du document !


Random Quantum

Une vraie source aléatoire en ligne: http://jve.linuxwall.info/blog/index.php?post/2011/03/04/Quantum-Random-Bit-Generator-Service

Créer un compte par là: http://random.irb.hr/

Récupérer les sources perl d'un module par là: http://search.cpan.org/~egor/Random-Quantum-0.04/

perl Makefile.PL
make
make test
make install

Ftp SSL

Installer d'abord le package 'ssleay':

# apt-get install libnet-ssleay-perl

Et puis enfin:

# cpan -i IO::Socket::SSL
# cpan -i Net::FTPSSL

Parce que 'cpan' ne peut pas installer le module 'ssleay'.

Tips

DateTime

Des dates a comparer… mais localtime et time c'est vraiment trop pourri…

Il faut utiliser le formidable module DateTime .

Liens

module

On peut l'installer comme cela:

# aptitude install libdatetime-perl

basic

#!/usr/bin/perl -w

use strict;
use warnings;

use DateTime;

{
  my $dt_now = DateTime->now();
  my $dt_loin = DateTime->new( year => 2009, month => 12, day => 1 );
  my $nbdays = $dt_loin->delta_days( $dt_now )->delta_days;

  print "jours: ", $nbdays, "\n";
}

Où:

  • $dt_now , c'est la DateTime (dt) de maintenant
  • $dt_loin , c'est une date composé, loin dans le temps.

Attention: faire un calcul (soustraction pour exemple), c'est créé un objet “duréé” (duration) !
Donc:

  • $dt_now-$dt_loin donne une “duration”.
  • $dt_loin→delta_days( $dt_now ) donne une “duration” aussi.

Pour avoir le nombre de jours de “duration” (toujours par exemple), il faut appeler la méthode delta_days (sans paramètre!).

:!: mais il faut l'appeler correctement , chose loin d'être evidente !

Et voila le résulta:

23

Oui, on est la veille de Noël !

:!: ( $dt_now - $dt_loin )→delta_days , contre toutes évidences, ne renvoit pas le nombre de jours entre 2 dates !
Ca renvoi le nombre de jours entre 2 jours, sans tenir compte du mois ou de l'année…

Nombre de secondes...

my $dt_now = DateTime->now();
my $dt_loin = DateTime->new( year => 2009, month => 12, day => 1 );
my $nbsec = $dt_now->subtract_datetime_absolute( $dt_loin ) -> delta_seconds;
print "secondes: ", $nbsec , "\n";
print "jours: ", int($nbsec/(24*3600)) , "\n";

Resultat:

secondes: 3775448
jours: 43

On peut aussi créer 2 dates avec un écart de 100 jours, comme cela:

my $dt_end = DateTime->now();
my $dt_start = $dt_end - DateTime::Duration->new( days => 100 );

en bref

do

Lien: http://www.tinybox.net/astuces/programmation/perl/love-love-my-do

On peut faire:

my $var = do { 34 };

Mais aussi:

my $var = do { 
  print "bonjour";
  if ( defined($ARGV[0]) ) { $ARGV[0]; }
  else { "rien de rien"; }
};
programmation_perl.1303770254.txt.gz · Dernière modification : 2011/04/25 22:24 de thierry