[resolu]problème avec une fonction

problème avec une fonction [resolu] - Perl - Programmation

Marsh Posté le 15-11-2006 à 20:45:34    

Bon alors j'ai créé une petite fonction qui demande à l'utilisateur le chemin d'accès d'un fichier, avec en arguments une phrase de requête, une phrase en cas de non indication d'un chemin d'accès et un test à effectuer (soit en lecture, soit en écriture). Voici la fonction :
 

Code :
  1. sub requete_fichier() {
  2. ($phrase,$phrase2,$test)=@_;
  3. print "$phrase";
  4. $fichier=<STDIN>;
  5. chomp($fichier);
  6. if ($fichier eq '')
  7. {
  8. print "$phrase2";
  9. requete_fichier($phrase,$phrase2,$test);
  10. }
  11. elsif ($test eq 'L' &&!open F, ("< $fichier" ))
  12. {
  13. print "le fichier specifie n'existe pas ! ";
  14. requete_fichier($phrase,$phrase2,$test);
  15. }
  16. elsif ($test eq 'W' &&!open F, ("> $fichier" ))
  17. {
  18. print "Le fichier specifie n'est pas accessible en ecriture. ";
  19. requete_fichier($phrase,$phrase2,$test);
  20. }
  21. return $fichier;
  22. }


 
ce qui me chiffonne c'est que ceci marche :
 

Code :
  1. $fichier=requete_fichier('Quel fichier souhaitez vous analyser ? ','Vous devez choisir un fichier a analyser. ','L');


 
parcontre ceci déconne (too many arguments for main::requete_fichier...) :
 

Code :
  1. $fichier=requete_fichier('a','b','W');


 
Est-ce que quelqu'un peut m'éclairer ?


Message édité par Yagmoth le 17-11-2006 à 00:39:26
Reply

Marsh Posté le 15-11-2006 à 20:45:34   

Reply

Marsh Posté le 15-11-2006 à 20:59:55    

Aucun de tes deux exemples ne fonctionne.
 
Si tu met des () dans la declaration de ta fonction, ca veut dire que tu donnes un prototype, et que ta fonction ne prend pas d'argument. Donc il faut soit enlever les (), soit faire ($$$), qui signifie que ta fonction attend 3 scalaires.
 
Edit : typos


Message édité par matafan le 16-11-2006 à 15:41:44
Reply

Marsh Posté le 15-11-2006 à 21:50:20    

Ben... Le premier exemple fonctionne pourtant à l'exécution  :pt1cable: . Mais je vais ôter les () et voir ce que ça donne, je suppose que tu as raison, mais je ne pige pas comment ça se fait dans ce cas que mon premier exemple a bel et bien fonctionné sans problème...


Message édité par Yagmoth le 15-11-2006 à 21:52:46
Reply

Marsh Posté le 16-11-2006 à 03:17:56    

J'ai essayé sur ma machine, tes deux exemples echouent avec la même erreur (too many arguments). Perl 5.8.8.

Reply

Marsh Posté le 16-11-2006 à 08:47:53    

+1 pour matafan

Reply

Marsh Posté le 16-11-2006 à 16:45:27    

Ta ligne suivante me semble bizarre :
 

Code :
  1. ($phrase,$phrase2,$test)=@_;


 
Etant dans une fonction, cette déclaration devrait être préfixée par my
 

Code :
  1. my ($phrase,$phrase2,$test)=@_;


 
Peut être pour ça que ça déconne ?


Message édité par Aricoh le 16-11-2006 à 16:50:18

---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 17-11-2006 à 00:39:00    

J'ai retiré le () et ça fonctionne dans les deux cas. Parcontre je persiste à dire que le deuxieme exemple fonctionnait au sein de mon programme (une question de structure peut être, aucune idée), mais merci du renseignement et de votre aide ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed