[Perl] Parseur d'options

Parseur d'options [Perl] - Perl - Programmation

Marsh Posté le 26-12-2004 à 11:24:13    

Bonjour,  
Je voudrais faire un parseur d'options qui permetterais de recuperer plusieurs valeurs pour une options, par exemple : ./test.pl -r toto tata -autre_options.
J'ai commencer a utiliser getopt::long mais celui  ci ne me recupere que la valeur toto pour l'option -r. Or je voudrais que getopt que -r prenne la valeur toto tata sans utiliser les guillemets pour accrocher les 2 valeurs.
Est ce que je peux configurer getopt::long pour qu'il est un comportement similaire a :  
./test.pl -r "toto tata" -autre_options mais avec la ligne precedente.

Reply

Marsh Posté le 26-12-2004 à 11:24:13   

Reply

Marsh Posté le 26-12-2004 à 12:35:41    

Le mieux dans ce cas est de creer toi même ton parseur d'options. C'est très facile à faire, il te suffit d'utiliser @_ ou @ARGS, je ne me rappelle plus vraiment, dans ton script principal.


---------------
Mon Flickr
Reply

Marsh Posté le 26-12-2004 à 14:26:39    

Tu peux utiliser ,  getopt(), getopts() ou meme getoptions() et vérifier @ARGV pour savoir si oui ou  non il y a des parametres passés a ton programme.
 


 
 
(fleme du  dimanche ?  ou google hors service ?!) :mmmfff:


Message édité par ouned-coding le 26-12-2004 à 14:29:10
Reply

Marsh Posté le 26-12-2004 à 20:43:30    

Alors en fait je sais que getopt(je l'ai dis dans mon message) existe mais il ne fait pas  ce que je veux c'est a dire pouvoir recuperer des agurment comme je l'ai decris. Si on veut faire des inclusion multiples on dois ecrire la chose comme ceux ci :  
./test.pl -r toto -r tata
Or je voudrais que le script ait un comportement similaire mais avec cette syntaxe :  
./test.pl -r toto tata.
Finalement j'ai tout fais tout seul ca m'as pris mon de temps mais c'est porc (je sais pas comment on fais des tableau de pointeur de fonctions ) par rapport a ce que j'ai fais en C et c'est pas assez generique a mon gout.
Mais j'ai decouvert le perl ce matin donc c'est normal ;)

Reply

Marsh Posté le 26-12-2004 à 22:31:29    

Getopt::Long ?

Reply

Marsh Posté le 27-12-2004 à 01:42:43    

Oui peut etre que getopt::long permet de le faire mais j'ai pas trouver l'option adequate

Reply

Marsh Posté le 27-12-2004 à 03:39:56    

bin...
./test.pl -r toto tata
 
"toto tata" sera ta valeur pour ton hash, alors après t'as qu'à faire un split sur " " pour récupéré chaque paramètre lorsque c'est des paramètres multiples

Reply

Marsh Posté le 27-12-2004 à 14:52:37    

Je suis pas sur de te suivre, je suis debutant en perl cependant je pense que l'option r n'auras comme valeur que toto, tata sera pris comme un parametre au script(je suis pas sur que ca s'appelle comme ca pour le perl). Mais si je me trompe je ve bien que tu m'explique comment je peux faire pour que -r prenne la valeur toto tata. Parce que pout l'instant j'ai un script qui fais une centaine de ligne que j'aimerais bien voir se reduire ;).

Reply

Marsh Posté le 27-12-2004 à 16:52:12    

bin il me semble qu'avec Getopt::Long, le paramètre sera bien "toto tata" et non "toto"
 
ensuite il te reste plus qu'avec utiliser la fonction "split" pour séparer les mots

Reply

Marsh Posté le 27-12-2004 à 23:44:13    

Non, le parametre d'un flag est le mot qui suit le flag. Le mot suivant est le premier mot des "non-option argument". C'est comme ca que marchent a peu pres tous les programmes sous unix/linux. Par contre si tu appelle ./test -r "toto tata" alors c'est bien "toto tata" qui sera passe en argument du flag r. Pareil si tu fais ./test.pl -r toto\ tata

Reply

Marsh Posté le 27-12-2004 à 23:44:13   

Reply

Marsh Posté le 28-12-2004 à 11:45:19    

Donc c'est bien ce que je pensais il n'y a pas de moyen de faire ce que je veux a part les guillemets ou repeter l'options devant chaque argument.
Merci quand meme de vos reponses

Reply

Sujets relatifs:

Leave a Replay

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