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 :

Sortir d'un foreach quand le if est correct


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 179
    Points : 50
    Points
    50
    Par défaut Sortir d'un foreach quand le if est correct
    Bonjour,

    j'ai écrit le code suivant pour vérifier qu'un login et mot de passe appartient bien à un tableau.
    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
    #!usr/bin/perl -w
    use strict;
     
    my $ref = 
    [
    	["monLogin","monPass"],
    	["test","test1"],
    	["log","pass"],
    	["monTest","monTest1"]
    ];
     
    my ($log,$pass) = ("log","pass");
    my ($login, $password);
    my $source = 0;
    foreach my $line(@$ref){
    ($login, $password) = @$line;
    	if($login eq $log and $password eq $pass){
            $source = 2;
    		$login = $log;
    		$password = $pass;
    		print "couple correct\n";
        }
    }
    print "$login ne $log or $password ne $pass\n";
    if($login ne $log or $password ne $pass){
        print "couple incorrect\n";
    	exit(0);
    }
    En sortie, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    couple correct
    monTest ne log or monTest1 ne pass
    couple incorrect
    Ca vient du fait que même si ma condition est correcte, la boucle continue tout de même.
    Je voudrai savoir comment faire pour sortir du foreach quand le if est correct.

    Merci

  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
    Les instructions de contrôle de boucle en Perl sont last, redo et next, ici il faut que tu utilises last pour sortir de la boucle en avance.

    Personnellement j'aurais plutôt utilisé List::Util::first() pour faire ça :
    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
    #!usr/bin/perl
    use strict; use warnings;
     
    use List::Util qw(first);
     
    my @lines = 
    (
    	["monLogin","monPass"],
    	["test","test1"],
    	["log","pass"],
    	["monTest","monTest1"]
    );
     
    my ($log,$pass) = ("log","pass");
    my ($source, $login, $password);
     
    if( defined( my $couple = first {$_->[0] eq $log and $_->[1] eq $pass} @lines ) ) {
       $source = 2;
       ($login, $password) = @$couple;
       print "couple correct\n";
    }
    else {
       print "couple incorrect\n";
       exit(0);
    }
    --
    Jedaï

  3. #3
    Membre confirmé
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Vu qu'un login est unique par définition, est-ce qu'un hash n'aurait pas été plus adéquat pour cette vérification ? C'est la première idée qui me serait venue, perso. Évidemment, ça peut ne pas être commode s'il y a trop de logins, mais il faudrait chercher loin pour ça, je crois (et à ce stade, une BDD serait plus pertinente).

  4. #4
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations forums :
    Inscription : Février 2007
    Messages : 34
    Points : 44
    Points
    44
    Par défaut
    Pour sortir du foreach, il suffit de mettre un 'last' après le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    print "couple correct\n";
    last;
    Au passage, je vois pas bien à quoi servent les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $login = $log;
    $password = $pass;
    puisque tu connais déjà ces valeurs dans $log et $pass... Et que la seule chose qui doit t'intéresser est de savoir si le couple login/password est OK.


    Mais avec un hash, c'est beaucoup plus simple :
    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
     
    #!usr/bin/perl -w
    use strict;
     
    my %ref = (
    	'monLogin' => 'monPass',
    	'test' => 'test1',
    	'log' => 'pass',
    	'monTest' => 'monTest1'
    );
     
    my ($log,$pass) = ('log','pass');
     
    my $strPassOK = $ref{$log};
    if (defined($strPassOK) && ($strPassOK eq $pass))
    {
    	print "OK\n";
    }
    else
    {
    	print "KO\n";
    }

Discussions similaires

  1. Utiliser IF quand le champ est vide... (critère)
    Par samlepiratepaddy dans le forum Access
    Réponses: 5
    Dernier message: 19/09/2005, 15h57
  2. [javascript]Savoir quand une frame est chargée
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/08/2005, 09h18
  3. Comment savoir quand une JFrame est rafraichie?
    Par mardona dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 19/08/2005, 12h20
  4. Réponses: 9
    Dernier message: 08/12/2004, 14h36
  5. Savoir quand une hotkey est relachée
    Par kriterium dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/07/2004, 14h44

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