IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

[debutant] fonction callback


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 10
    Points : 7
    Points
    7
    Par défaut [debutant] fonction callback
    Bonjour tout le monde
    je débute en perl, et je suis en train d'essayer de comprendre un script qui importe un scan Nmap dans une base de données SQLite, mais malheureusement j'ai un peu de mal avec ce bout de code.
    Si quelqu'un pouvait me donner qques explications...
    Merci beaucoup
    Au fait c'est quoi le rôle habituel d'une fonction callback?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    ...
    use vars qw(%S %G); # %S est déclaré comme un hash global
     
    ....
     
    $S{INSERT_HOST} = qq{INSERT OR REPLACE INTO }.$G{TABLE}....; # pas compris, 
     
     
     
    $np->callback(\&insert_host); #pourquoi le \ ?
     
     
     
    ---------------------------------------
     
    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 ?
    	if(ref($callback) eq 'CODE'){ #$callback est de type code ?
    		$self->{callback}{coderef} = $callback; //$Self est une liste à deux dimensions ? qqchose m'échappe là
    		$self->{callback}{is_registered} = 1;
    	} else {
    		$self->{callback}{is_registered} = 0;
    	}
     
    	#returns if a callback is registered or not
    	return $self->{callback}{is_registered};
    }

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Une fonction "callback" c'est par définition une fonction que tu n'appelles pas toi-même dans le flux de ton programme, mais qui est appelé par un gestionnaire d'évènement pour gérer un évènement d'un certain type (ici, il est appelé à chaque fois qu'il faut inscrire une donnée dans la base j'imagine, sans plus de détails je ne peux me montrer affirmatif).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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};
    }

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    ici la fonction callback est appelée dans le programme, avec en paramètre '\&insert_host', et justement je ne comprend pas ce paramètre. C'est quoi un tableau, un scalaire .. et pourquoi il est précédé par un \&?


    $np->callback(\&insert_host);

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Relis (toute) ma réponse !!!

    --
    Jedaï

  5. #5
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Citation Envoyé par samipate
    ici la fonction callback est appelée dans le programme, avec en paramètre '\&insert_host', et justement je ne comprend pas ce paramètre. C'est quoi un tableau, un scalaire .. et pourquoi il est précédé par un \&?


    $np->callback(\&insert_host);
    Apparemment, tu débutes vraiment en Perl, je ne peux alors que te conseiller de lire mon cours et de consulter la FAQ sur des questions aussi basiques.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  6. #6
    Futur Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    autant pour moi, je suis trop bête.
    J'avais jeté un coup d'oeil aux tutoriels et faq, mais j'avais pas trouvé ce que je cherchais.
    Merci bcp.

Discussions similaires

  1. Fonction callback
    Par saibe dans le forum Linux
    Réponses: 4
    Dernier message: 19/01/2012, 10h41
  2. Fonction callback avec arguments ?
    Par sorry60 dans le forum GTK+ avec C & C++
    Réponses: 39
    Dernier message: 07/11/2005, 10h41
  3. problème fonctions callback
    Par youp_db dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 02/10/2005, 14h47
  4. [Débutant] fonction CALLBACK
    Par tlt dans le forum MFC
    Réponses: 2
    Dernier message: 29/10/2004, 16h55
  5. Fonction callback dans une classe
    Par julian_ross dans le forum MFC
    Réponses: 8
    Dernier message: 02/03/2004, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo