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 :

Référencement pour les subroutines [Débutant(e)]


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 95
    Points : 52
    Points
    52
    Par défaut Référencement pour les subroutines
    Bonjour,
    J'ai une question de niveau méga débutant et j'en demande à votre expertise.

    Donc tout ce que je veux c'est appelé une fonction avec un paramètre et que celui-ci soit modifié.

    Par exemple moi ce que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    sub ajoute1
    {
    	my $node=\$_[0];
    	$$node=$$node+1;
    }
    Ceci modifie bien la variable passée en paramètre.
    Ce que je voulais savoir c'est : Comment procéder de la même manière en utilisant le @_ pour récupérer les paramètres ?

    Merci de votre aide

  2. #2
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    je ne comprends pas bien ta question,. C'est bien le tableau @_ (ou du moins son premier élément) que tu modifies quand tu utilises la référence \$_[0].

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 95
    Points : 52
    Points
    52
    Par défaut
    Bonjour et merci pour la réponse.
    Dans le cas de la fonction que je présente, cela fonctionne mais je voudrais pouvoir utiliser un

    my ($node)=@_ (qui sera plus utile pour les fonctions à plusieurs arguments, je te l'accord) avec un $node qui pointe qui les éléments de @_

  4. #4
    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
    je n'ai pas trop compris, mais tu peux faire quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub ajoute
    {
    	my @node= map \$_, @_;
    	${$node[0]}++; # Ajoute 1 au premier élément du tableau
    	${$node[1]} += 2; # Ajoute 2 au 2e élément du tableau
    }
     
    my @a = (1 .. 10);
    ajoute(@a);
    Cela dit, je trouve qu'il n'est pas sain d'ajouter à une fonction des effets de bord sur ses paramètres alors que rien n'indique apriori qu'elle en aurait.

    Il me parait plus sain de définir "ajoute" avec une référence à un tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub ajoute
    {
    	my $node = $_[0];
    	${$node}[0]++; # Ajoute 1 au premier élément du tableau
    	$node->[1] += 2; # Ajoute 2 au 2e élément du tableau
    }
     
    my @a = (1 .. 10);
    ajoute(\@a);
    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

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 95
    Points : 52
    Points
    52
    Par défaut
    Bonjour,
    merci de m'accorder ton temps et ton aide.
    C'est quand je vois ta réponse que je comprends que je ne suis pas clair, je vais donc reformuler mon envie !

    voici la forme de la fonction que je voudrais avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    sub ajoute1
    {
    	my ($node1,$node2)= @_;
    	$node1++;
    	$node2++;
    }
    Le problème ici est que $node1 et $node2 ne pointent pas sur les arguments de la fonction et donc cette fonction est inutile.

    Ce que je voudrais savoir c'est que dois-je rajouter sur la ligne :
    my ($node1,$node2)= @_;
    pour que $node1 et $node2 pointent sur les paramètres de la fonction.

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par hazaki Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    sub ajoute1
    {
    	my ($node1,$node2)= @_;
    	$node1++;
    	$node2++;
    }
    avec l'appel suivant, ça fonctionnera si j'ai bien et $node1 correspondra au 1er élément passé en argument de la fonction
    donc dans ton exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub ajoute1
    {
    	my ($node1,$node2)= @_;
    	$$node1++;
    	$$node2++;
    }
    my @a=(0, 1);
    &ajoute1( \$a[0], \$a[1] );
    print "@a";    ---->   "1 2"

  7. #7
    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
    @6ril23, pour que cela marche, il faudra écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	$$node1++;
    	$$node2++;
    Sinon, en lisant ta réponse, hazaki, je crois que j'ai bien compris ce que tu voulais, et ma réponse reste donc la même
    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

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    @6ril23, pour que cela marche, il faudra écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	$$node1++;
    	$$node2++;
    Sinon, en lisant ta réponse, hazaki, je crois que j'ai bien compris ce que tu voulais, et ma réponse reste donc la même
    oui je viens de voir et j'allais changer

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 95
    Points : 52
    Points
    52
    Par défaut
    Ah voilà c'est ça que je cherchais !
    Merci pour votre aide !

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

Discussions similaires

  1. fonctionnement "call" pour les subroutines
    Par membreComplexe12 dans le forum Fortran
    Réponses: 2
    Dernier message: 06/10/2014, 16h23
  2. Réponses: 3
    Dernier message: 08/10/2008, 12h40
  3. Délai pour référencement par les moteurs
    Par elekaj34 dans le forum Référencement
    Réponses: 5
    Dernier message: 27/11/2007, 13h35
  4. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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