Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1499 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  passage de paramètre à une fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

passage de paramètre à une fonction

n°2111307
donny3
Posté le 14-11-2011 à 15:14:55  profilanswer
 

salut,
 
J'ai une fonction de ce type :

Code :
  1. sub mafonction($$%)
  2. {
  3. my ($val1,val2,%valx) = @_;
  4. }


et je souhaiterai lui ajouter un paramètre à cette fonction
 
donc j'ai fait ceci  

Code :
  1. sub mafonction($$%$)
  2. {
  3. my ($val1,val2,%valx,$newval) = @_;
  4. }


J'appel la fonction dans un script :
 

Code :
  1. mafonction( $var1, $var2, ('PRTR'=> "DEBUT" )  ,$newval);


mais j'ai cette erreur  

Citation :

Odd number of elements in hash assignment


 
pourquoi ?
est-ce impossible d'ajouter une variable après le % ?
je pourrai rajouter $newval avant %valx mais
je ne peux pas,
il y aurait trop d'impact en terme de modification.
 
merci


Message édité par donny3 le 14-11-2011 à 15:29:16
mood
Publicité
Posté le 14-11-2011 à 15:14:55  profilanswer
 

n°2111386
gilou
Modérateur
Modzilla
Posté le 14-11-2011 à 23:09:36  profilanswer
 

Citation :

est-ce impossible d'ajouter une variable après le % ?


Oui et non:  
Ce qui bloque dans ton code, c'est le
my ($val1, $val2, %valx, $newval)
Parce que ça, ça essaie de prendre 2 par 2 tout ce qui reste pour en faire un hash.
 

Code :
  1. #!/usr/local/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. sub mafonction($$%$)
  6. {
  7.  my ($val1, $val2, $valx, $newval) = @_;
  8.  print $newval, "\n";
  9.  foreach (keys(%{$valx})) {
  10.    print "key: $_, value: ${$valx}{$_}\n";
  11.  }
  12. }
  13.  
  14. my $var1 = 1;
  15. my $var2 = 2;
  16. my $newval = 3;
  17.  
  18. mafonction $var1, $var2, {'PRTR' => "DEBUT", 'PRTR1' => "FIN"}, $newval;


 
Ça marche, mais ça génère aussi des warnings  (sub mafonction($$$$) n'en générera pas).
Noter qu'on passe un "anonymous array", comme il est d'usage dans les appels de fonctions en perl.
 
La logique du système, c'est qu'en principe, un @ ou un % ne peuvent figurer qu'en dernière position, car en principe, ils "mangent" les arguments (bon, dans la pratique, ce ne semble plus vraiment être la cas, au vu de ce que j'ai posté avec un warning).
La documentation est loin d'être claire sur le sujet (emploi de + par exemple), et ça fait partie des zones de perl qui gagneraient a avoir un bon tutorial.
 
Mais bon, le terme prototype en Perl est très trompeur: ce n'est pas vraiment une vérification de prototype mais plutôt une manière de forcer 1) le nombre d'arguments et 2) l'interprétation (scalaire, liste...) des arguments rencontrés.
 
Pour un des rares cas d'emplois utile des prototypes en Perl, cf http://www.perlmonks.org/?node_id=406231
Il vaut mieux aller voir du côté du module Params::Validate par exemple, pour une vérification (éventuellement poussée) du type des paramêtres passés à une fonction, si on en a besoin.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  passage de paramètre à une fonction

 

Sujets relatifs
passage de parametre avec autocomplete de jquery uipassage de paramètre d'une fonction fortran appelée depuis python
Passage d'une fonction sans paramètre en paramètre d'une autre[résolu][RESOLU] tab multidimensionel en paramètre d'une fonction
passage d'un tableau php parametre à une fonction javascript[PERL] Passage de plusieurs array en paramêtre à une fonction
[Résolu] Passage d'une fonction en paramètre ?!?[E-Commerce] pb de passage de paramètre à une fonction
Passage d'un pointeur en paramètre de fonction[C/C++] Passage et réception de paramètre avec une fonction
Plus de sujets relatifs à : passage de paramètre à une fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR