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 :

$scalaire = $scalaire + $$référence


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut $scalaire = $scalaire + $$référence
    Bonjour,

    on révise nos bases de programmation?

    J'aimerais attribuer à un scalaire la valeur d'un scalaire + la valeur d'une référence. Si je modife la valeur de la référence, mon premier scalaire $scalaireTrois ne sera pas réévalué car il ne contient pas l'expression de définition mais un scalaire. Avec une fonction, je peux obtenir ce que je veux, j'aimerais auparavant savoir si un guru a un truc pour ne pas faire justement de fonction. Je pense que le script est assez parlant...

    Merci d'avance
    Manu

    ##############################################
    #!/usr/bin/perl -w

    use strict;

    my $scalaireUn = 12;
    my $scalaireDeux = 4;
    my $_scalaireDeux = \$scalaireDeux;
    my $scalaireTrois = $scalaireUn + $$_scalaireDeux;

    print $scalaireUn,"\n"; # Affiche 12 !
    print $scalaireDeux,"\n"; # Affiche 4
    print $$_scalaireDeux,"\n"; # Affiche 4
    print "TROIS:", $scalaireTrois,"\n"; # Affiche TROIS:16

    $$_scalaireDeux=10;
    print $$_scalaireDeux,"\n"; # Affiche 10
    print "TROIS:", $scalaireTrois,"\n"; # Affiche TROIS:16

    # Je suis obligé de réevaluer $scalaireTrois pour obtenir la valeur désirée
    $scalaireTrois = $scalaireUn + $$_scalaireDeux;
    print "TROIS:", $scalaireTrois,"\n"; # Affiche TROIS:22

    ##############################################

  2. #2
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    C'est normal. Quand tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $scalaireTrois = $scalaireUn + $$_scalaireDeux;
    Tu dis "Affecter la valeur de $scalaireUn plus celle de la valeur référencée par $_scalaireDeux à $scalaireTrois". Ça ne dit pas que chaque fois que $scalaireTrois est utilisé, sa valeur doit être recalculée.

    Aussi bien utiliser une fonction comme tu l'as dit.

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/perl -w
     
    use strict;
     
    my $scalaireUn = 12;
    my $scalaireDeux = 4;
    my $scalaireTrois = sub { return $scalaireUn + $scalaireDeux };
    devrait parfaitement faire l'affaire.

    --
    Jedaï

  4. #4
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Tu pourrais peut-être utiliser le module Scalar::Lazy aussi.

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci pour les 2 propositions !

    pour le module Scalar::Lazy, j'ai trouvé Tie::LazyFunction sur CPAN mais pas celui que tu cites.

    Manu

  6. #6
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Oups, le nom est Scalar::Defer. Pardon

    http://search.cpan.org/~audreyt/Scal...calar/Defer.pm

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

Discussions similaires

  1. vérifier si un scalaire est dans une un tableau
    Par STEPH69000 dans le forum Langage
    Réponses: 6
    Dernier message: 04/06/2006, 17h48
  2. Réponses: 7
    Dernier message: 15/02/2006, 09h58
  3. Déplacement de données mais dans scalaire
    Par siaoly dans le forum Langage
    Réponses: 1
    Dernier message: 27/07/2005, 00h30
  4. [langage] comparer des scalaires
    Par Leishmaniose dans le forum Langage
    Réponses: 3
    Dernier message: 25/05/2005, 09h13
  5. Angle entre deux droites quelconques par produit scalaire
    Par cyber_N dans le forum Mathématiques
    Réponses: 6
    Dernier message: 22/05/2005, 20h46

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