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 :

Ecrire directement une valeur issue d'une fonction qui renvoie une liste


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 45
    Par défaut Ecrire directement une valeur issue d'une fonction qui renvoie une liste
    Bonjour,

    je voudrais éclaircir une petite subtilité qui est un mystère pour moi.

    pourquoi est-ce que ça, ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ligne = "a b c";
    $var = ( split(/\s+/, $ligne) )[1];
    print $var, "\n";
    => b
    alors que ça, ça ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ligne = "a b c";
    print ( split(/\s+/, $ligne) )[1], "\n";
    => syntax error at a.pl line 100, near ")["
    merci d'avance pour ce petit éclaircissement...

  2. #2
    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 : 59
    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
    Par défaut
    Je n'ai pas toute l'explication, mais je suppose que c'est lié au contexte fourni pour "( split(/\s+/, $ligne) )[1]" qui dans le premier cas est scalaire, et pour le deuxième, est liste.

  3. #3
    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 : 59
    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
    Par défaut
    J'essaye d'aller plus loin : print fourni un contexte de liste (et non pas de tableau ; voir "perldoc -f print") à ses arguments, de sorte que ( split(/\s+/, $ligne) ) est interprété dans un premier temps comme une liste et non un tableau (précédence des opérateurs je présume). Or les listes ne sont pas déréférençable (donc pas possible de récupérer [0]).

    Maintenant, essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -E 'say +( split(/\s+/, "a b c") )[1], "\n";'
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -E 'say (( split(/\s+/, "a b c") )[1]), "\n";'

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Même si je ne te réponds pas à ta question, je te suggères cette écriture simplifiée et lisible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    my $ligne = "a b c";
    my (undef, $var) = split /\s+/, $ligne;
    print $var, "\n";

  5. #5
    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 : 59
    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
    Par défaut
    @djibril : ce n'est pas très adapté à une recherche à un indice quelconque (et même pas adapté à la recherche d'un indice élevé, voire simplement supérieur à 2). Par ailleurs, ça n'est pas très "explicite" (lecture du code plus difficile à comprendre que le déréférencement d'un tableau avec un indice "en clair");

    Perso, je ne préconise pas du tout cette écriture pour extraire un slice de tableau.

    Mais, je félicite la démarche de seagull, qui cherche à comprendre.

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    C'est juste un exemple et ça dépend vraiment de ce que l'on veut. Si c'est pour chercher x indice, c'est sûr que ce n'est peut-être pas la meilleure solution, mais dans certains cas, quand tu sais concrètement ce que tu veux, que tu parses un tableaux avec header (issu d'un fichier txt), je préfère ce genre d'écriture.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser fonction qui est une valeur
    Par yoyo_le_landais dans le forum QlikView
    Réponses: 10
    Dernier message: 27/04/2012, 13h44
  2. Fonction qui retourne une valeur
    Par oOXimOo dans le forum IHM
    Réponses: 7
    Dernier message: 08/07/2010, 11h26
  3. Ecrire une fonction qui renvoie une structure de données (type)
    Par dinosaure dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/09/2008, 20h59
  4. un fonction qui retourne une valeur aléatoire
    Par houwa dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 02/03/2008, 20h27
  5. [debutant] fonction qui retourne une valeur
    Par arnolpourri dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/06/2006, 09h29

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