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 :

demande de precision a propos de "foreach"


Sujet :

Langage Perl

  1. #1
    Membre régulier Avatar de wodel
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 104
    Points
    104
    Par défaut demande de precision a propos de "foreach"
    Salut,

    j'aimerai avoir une petite précision sur la commande 'foreach'.

    dans un script que j'ai ecris ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    foreach my $oject(@tableau_1)
    {
            $objet =~ /mon_expression_reguliére/;
     
            #meme si vous trouvez cette commande bizzard :oops: 
            $objet = $&;
     
            push(@tableau_2, $objet);
    }
    il se trouve que j'ai eu besoin d'utiliser le tableau_1 plus bas dans mon code et je me suis aperçu que ces valeurs ont changés, ie cette ligne de code: $objet = $& avait non seulement changé la variable $objet mais aussi la case correspondante à l'itération dans le tableau_1, et ça m a étoné car je croyait que la variable $objet était independante du tableau, il parrait ici qu'elle fonctionne tel un pointeur......

    esq c'est le cas ou bien je dit n'import quoi? car lorsque j'ai supprimé cette instruction et ai utilisé push(@tableau_2, $&) le tableau a gardé ces valeurs.....

    merci d'avance
    Simbad le Marin

    Core i5 6500 / 32Go RAM / GTX 1060 / HDD 1To Fedora 29

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Je n'ai point compris toute la syntaxe mais grosso modo, tu te retrouves avec les valeurs modifiées dans ton tableau 1 alors que tu voulais les conserver telles quelles ?

    Si j'ai bon, je dirais que c'est normal car tu as travaillé en direct sur le contenu de @tableau1.

    Y a plusieurs manières de procéder, en voici 2 :

    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
    my @tableau_1 = ("val1","val2", etc.);
    my @tableau_2;
     
    @tableau_2 = RemplitTab(@tableau_1);
     
    sub RemplitTab
    {
        my @tableau;
        foreach my $objet(@_)
        {
            $objet =~ /mon_expression_reguliére/;
     
            #meme si vous trouvez cette commande bizzard :oops: 
            $objet = $&;
     
            push(@tableau, $objet);
        }
        return @tableau;
    }
    Et sans passer par une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    foreach my $objet(@tableau_1)
    {
            my $val = $objet;
            $val =~ /mon_expression_reguliére/;
     
            #meme si vous trouvez cette commande bizzard :oops: 
            $val  = $&;
     
            push(@tableau_2, $val);
    }
    Note : la variable déclarée $oject dans ton foreach n'est pas orthographiée de la même manière qu'à l'intérieur de la boucle ($objet), ce qui laisse à penser que tu n'utilises pas "use strict;" au début de ton code. Spabienssa

  3. #3
    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
    Tout à fait, foreach crée un "alias" sur les valeurs de la liste qu'on lui passe. Ca peut être dangereux, mais ça peut aussi être utile.

    --
    Jedaï

Discussions similaires

  1. [VBA-E]Demande de précision sur les menus
    Par geffdenimes dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/06/2003, 10h46

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