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 :

Condition qui ne fonctionne pas


Sujet :

Langage Perl

  1. #21
    Membre actif
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 164
    Points : 218
    Points
    218
    Par défaut
    Citation Envoyé par Moymoy Voir le message
    ... 'eq' et '==' c'est différent ?
    avec if ($uhost == $users[$i]) $uhost et $users[$i]) sont convertis en nombres, si ces variables contiennent des chaînes de caractères qui ne représentent pas des nombres, la conversion donne 0, le test est donc if (0==0) ce qui est vrai.
    avec if ($uhost eq $users[$i]) ce sont alors les chaînes de caractères qui sont comparées (si les deux variables contiennent des chaînes de caractères).

  2. #22
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Moymoy Voir le message
    ... 'eq' et '==' c'est différent ?
    == effectue une comparaison numérique et eq une comparaison littérale (de même que !=, <, >, <=, >= d'un côté et ne, lt, gt, le, ge de l'autre). Ainsi que les opérateurs <=> et cmp utilisés pour les tris.

    EDIT: oups, je n'avais pas vu qu'il y avait déjà une réponse de Nibroc en page 2.

  3. #23
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Exact. Mais ton @param est un tableau de tableaux, pas une référence vers un tableau de tableaux. Or il me semblait qu'un simple tableau de tableaux était aplati en une seule liste lors d'un passage de paramètre à une fonction. Ce n'est apparemment pas le cas. Au temps pour moi.
    Si tu appelles une fonction ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my (@a, @b);
    @a = 1..10;
    @b = 100..1000;
    f(@a, @b);
    La fonction f recevra effectivement dans @_ les nombres de 1 à 10 et de 100 à 1000 de manière aplatie, et donc, impossible de retrouver deux tableaux.
    Mais pas si tu passes des références (f(\@a, @b) par exemple).
    C'est sans doute ce qui est fait lors de l'appel de la fonction cmd_adduser par Xchat (il passe une référence de tableau, un premier argument).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  4. #24
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Merci pour vos réponses, tout fonctionne
    J'ai juste une question pour toi Ours, tu sais comment fermer un onglet dans Xchat en Perl ?
    perceque moi j'ai pas trouver sur le net ...
    Merci

  5. #25
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Si tu appelles une fonction ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my (@a, @b);
    @a = 1..10;
    @b = 100..1000;
    f(@a, @b);
    La fonction f recevra effectivement dans @_ les nombres de 1 à 10 et de 100 à 1000 de manière aplatie, et donc, impossible de retrouver deux tableaux.
    Mais pas si tu passes des références (f(\@a, @b) par exemple).
    C'est sans doute ce qui est fait lors de l'appel de la fonction cmd_adduser par Xchat (il passe une référence de tableau, un premier argument).
    En fait, c'est moi qui parlais trop vite et de travers sans assez réfléchir à ce que je disais. Ce que l'on appelle couramment un "tableau de tableaux" n'est pas réellement un tableau de tableaux, mais un tableau de références à des tableaux, autrement dit un simple tableau de scalaires (donc certains au moins sont des références à des tableaux). La fonction récupère bien la liste de ces scalaires, et il n'y a aucune raison que le tableau soit "aplati", il est déjà plat, en quelque sorte. Le pire est que j'ai déjà assez souvent passé des tableaux de tableaux en paramètre.

    Cela n'a rien à voir, effectivement, avec le cas où l'on essaierait de passer deux tableaux à la suite, qui se retrouveraient alors aplatis en une liste unique.

  6. #26
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 71
    Points : 87
    Points
    87
    Par défaut
    re,
    Citation Envoyé par Moymoy Voir le message
    Merci pour vos réponses, tout fonctionne
    J'ai juste une question pour toi Ours, tu sais comment fermer un onglet dans Xchat en Perl ?
    perceque moi j'ai pas trouver sur le net ...
    Merci
    re, je présume que tu veux parler de la fermeture automatique d'un privé si l personne n'est pas dans ta "liste blanche".

    si c'est bien cela, tu fais une petite erreur.
    dans l'ordre, Xchat va réagir ainsi :
    -reçoit le RAW comme quoi tu reçois un message privé.
    -si du code dans les scripts gère ces RAW, alors on active ces fonctions
    -si aucune interruption n'a été mise en route dans ces scripts, on continue logiquement en fonction de Xchat ( ici, ouverture du mp et affichage du texte reçu )

    donc, la solution n'est pas de vouloir fermer la fenêtre si la personne n'est pas dans ta liste blanche, mais de ne pas autoriser l'ouverture.

    donc qqchose dans ce goût sera plus adapté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Xchat::hook_server( 'PRIVMSG',"raw_privmsg");
    sub raw_privmsg {
    	if ( <la personne est dans ta true list> || <la personne t'envoi un ctcp> ) {
    		return Xchat::EAT_NONE();
    	} else {
    		<tu fais ton process habituel en cas de mp non autorisé>
    		return Xchat::EAT_XCHAT();
    	}
    }
    plus d'info sur les return dans xchat ici : http://xchat.org/docs/xchat2-perl.html#return_values

    d'ailleurs, les CTCP doivent être exemptés car sinon, Xchat n'y répondra plus.
    si tu ne prend pas le temps de les exempter, certains serveurs pourraient te prendre pour un bot ( d'ailleurs, les bots perls pour IRC sont hyper sympas et rapides ( surtout comparé à des eggs ) ) et donc t'éjecter du serveur.

    hésite pas si tu as d'autres questions.

    cordialement

    ours

  7. #27
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    J'ai encore une question
    comment traiter ces données la Xchat::get_list("ignore") ...
    Merci

  8. #28
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 71
    Points : 87
    Points
    87
    Par défaut
    re,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Xchat::hook_command('list_ignore', "liste_ignore");
     
    sub liste_ignore {
    foreach my $tmp ( Xchat::get_list( 'ignore' ) ) {
    Xchat::print("ignore=".$tmp->{mask}."\n"); 
    }
    }
    te listera la liste des marks en ignore.

    cordialement

    ours

  9. #29
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Citation Envoyé par Moymoy Voir le message
    ... 'eq' et '==' c'est différent ?
    très différent. Le premier travaille sur des chaînes de caractères, le second sur des nombres. Les opérandes sont convertis au type correspondant. Donc

    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
    $ perl -E 'say ("foo" == "bar" ? 1 : 0)'
    1
    $ perl -E 'say ("foo" eq "bar" ? 1 : 0)'
    0
    $ perl -E 'say ("0+1" == "0000000" ? 1 : 0)'
    1
    $ perl -E 'say ("zero" == "0000000" ? 1 : 0)'
    1
    $ perl -E 'say ("zero" == 0 ? 1 : 0)'
    1
    $ perl -E 'say ("123" == "123 et des poussières" ? 1 : 0)'
    1
    $ perl -E 'say ("123.456" == "123 et des poussières" ? 1 : 0)'
    0
    $ perl -E 'say (123 == "123 et des poussières" ? 1 : 0)'
    1
    $ perl -E 'say (123 eq "123 et des poussières" ? 1 : 0)'
    0
    $ perl -E 'say (0x7B eq "123" ? 1 : 0)'
    1
    $ perl -E 'say (0x7B eq 123 ? 1 : 0)'
    1
    $
    même chose pour les opérateurs de comparaison : 'gt' et '>', 'ge' et '>=', etc.
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Condition qui ne fonctionne pas
    Par korked dans le forum Général Java
    Réponses: 0
    Dernier message: 16/05/2015, 20h44
  2. Condition qui ne fonctionne pas dans une page jsp
    Par Lopak dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 29/04/2010, 16h37
  3. condition qui ne fonctionne pas
    Par Invité(e) dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2010, 16h27
  4. condition (if/else) qui ne fonctionne pas
    Par oceane751 dans le forum Langage
    Réponses: 8
    Dernier message: 24/07/2007, 23h58
  5. [vb.net] Condition qui ne fonctionne pas
    Par dyree dans le forum ASP.NET
    Réponses: 3
    Dernier message: 13/06/2006, 09h55

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