1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| ...
use vars qw(%S %G); # %S est déclaré comme un hash global
....
# On met dans %S, à la clé "INSERT_HOST", la valeur "INSERT OR REPLACE INTO " concaténée
# au contenu de %G à la clé "TABLE", etc...
$S{INSERT_HOST} = qq{INSERT OR REPLACE INTO }.$G{TABLE}....; # pas compris,
$np->callback(\&insert_host); #pourquoi le \ ? # Parce qu'on passe une référence à la fonction "(&)insert_host"
# le & est le sigil (comme $ ou @ ou %) pour les fonctions, mais il n'est pas
# obligatoire, c'est pourquoi on le voit rarement sauf quand on veut prendre
# la référence à la fonction ( \machin rend la référence sur la variable machin)
---------------------------------------
sub callback {
my $self = shift;
my $callback = shift; #first arg is CODE #c'est pas le deuxième
# argument qu'il est en train de charger ?
# Non, en Perl, l'objet est passé en premier paramètre à la méthode appelée,
# c'est à dire ici $np (qui passe donc dans $self), mais c'est l'objet qui
# appelle la fonction, on ne le considère pas vraiment comme un argument
if(ref($callback) eq 'CODE'){ #$callback est de type code ? #tout à fait : une référence à une fonction (qu'elle soit anonyme ou non
$self->{callback}{coderef} = $callback; //$Self est une liste à deux dimensions ? qqchose m'échappe là
# $self est un objet implémenté comme un hash de hash, ce qui est relativement courant en Perl
$self->{callback}{is_registered} = 1;
} else {
$self->{callback}{is_registered} = 0;
}
#returns if a callback is registered or not
return $self->{callback}{is_registered};
} |
Partager