Perl

perl OO send message

dans le paradigme OO, appeller une méthode correspond en fait à l'envoi d'un message à cet objet.
en ruby:

foo.bar() est équivalent a foo.send('bar')

Je me disais bien que c'etait possible en perl mais n'avais jamais approfondi le sujet .. et là ... en lisant du code, je trouve ...

$method = 'bar';
$foo->$method('booh');

technique pour splitter les marc records

use strict;
use warnings;
use MARC::Record;
 
undef $/; 
 
for (split /\x1D/,<>) {
  my $r = MARC::Record->new( $_."\x1D");
  print $r->as_formatted; 
  die;
}

merci patron !

@INC, mais aussi %INC

@INC est l'equivalent de $PATH pour l'interpreteur perl. Mais lorsque je fais un use Module, comment savoir quel fichier est sourcé?

> perl -MScalar::Util -le 'print $INC{"Scalar/Util.pm"}'
/usr/lib/perl/5.8/Scalar/Util.pm

merci encore a Vincent!

infos dans les paquets perl

il y a qq temps, j'avais bidouillé dh-make-perl, envoyé qq patches, envisagé de réécrire le truc et jeté l'éponge en me disant que le gros du boulot était de rechercher finement les informations dans les distribution et que ca n'était pas coton vu ma faible connaissance des paquets cpan.

Voilà que Sébastien Aperghis-Tramoni, sur la liste des Paris.pm, viens te me hacher une partie du boulot dans le cas ou j'envisagerais de me réintéresser au problème:

Pour les besoins de base :
http://search.cpan.org/dist/Module-ScanDeps/

Pour des besoins plus avancés :

generation de xml

# la on dit a perl de pas faire le con mais plutot le malin
use strict;
use warnings;
 
# la on dit a perl de faire du xml propre avec indentation et tout 
 
use XML::Generator ':pretty';
 
# print c'est pour afficher, xmldecl c'est pour faire un prologue xml
# apres le reste c'est des balises 
print xmldecl(encoding => 'utf-8') , html(
    head(
        title('this force')
    ) , body (
        map {
            # chaque element du tableau est un paragraphe
            p($_)
        } qw[ those are words for test ]
    )
)
;

perl autobox - use builtin data types as first-class objects

toute l'explication est dans le titre ... tout est la :
http://search.cpan.org/~chocolate/autobox-2.00/autobox.pod

minus comme prefixe de clef: mauvaise idée!

pas mal de modules perl utilisent - comme prefixe de noms de clef .. ca permet notament de filtrer toute clef ne correspondant pas à ce critère (et ainsi pouvoir stocker d'autres choses dans le hash).

Perso, je trouve ca dangeureux:

%x = (
    -name => $name
    -default => $name
);

et perl vous dit que le nombre d'éléments est impair ... pas d'erreur de syntaxe .... L'erreur est que j'ai oublié la virgule entre les 2 paires! on a donc :

%x = (
    -name => ( $name - 'default' ) => $name
);

au lieu de

Class::ISA et généalogie ascendante

Tu as oublié qu'il faut préférer la composition à l'héritage?

et du coup tu sais plus trop qui hérite de quoi ? Class::ISA permet de faire de la généalogie en perl :

# Une classe mère
package Maman;
 
sub one { 1 }
 
# dont hérite une autre classe
package Chiard; use base 'Maman';
 
sub new { bless {}, shift }
 
package main;
 
use strict;
use warnings;
use Class::ISA;
 
# création d'un chiard
my $x = new Chiard;
my $ref = ref $x;
 
# Généalogie ascendante
print "$_\n" for $ref, Class::ISA::super_path( $ref );

Syndiquer le contenu