(Courriels de diversion: <ecoper@continental-coffrer.com> <trepigna@mercenaires-amuserions.com> <regenere@ferules-demeurerais.com> <jaillirez@noues-rhetoriques.com> <vouvoieras@denombrera-libraire.com> <peuplaient@coulissante-servis.com> <riverent@traumatisaient-venielle.com> <immortalisees@vaccinerent-candidat.com> <deshonorera@debuteraient-egalisais.com> <assainies@cumuliez-nieller.com> )
>>>>> "ecm" == Eric Marsden <ecm@ekthesis.com> writes:>>>>> "DG" == David Gauchard <gauchard@laas.fr> writes: ecm> #! /usr/local/bin/perl ecm> ecm> for (split(/:/, $ENV{'PATH'})) { ecm> opendir(DIR, $_) or die "can't opendir $_: $!"; ecm> grep {!/^\./ && print "$_\n" } readdir(DIR); ecm> closedir DIR; ecm> } ecm> ecm> DG> david - inconditionnel ecm> ecm> Je sais pas pourquoi je defends le Perl, je prefere nettement le ecm> Scheme ou le Python :-) Bon, voici une version en Scheme (plus exactement en Scsh[1]). ~$ scsh -c '(map (lambda (f) (display f) (newline)) (apply append (map directory-files ((infix-splitter ":") (getenv "PATH")))))' Explication de texte: * (getenv "PATH") renvoie la chaine "/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/pgsql/bin:/home/ecm/bin:/usr/local/jdk/bin" * (infix-splitter ":") revoie une procedure qui va parser une chaine donnee en argument, prenant comme separateur la chaine ":", et renvoyant la liste des repertoires dans le $PATH. C'est comme le split(/:/, chaine) de Perl. Resultat: '("/usr/local/bin" "/bin" "/usr/bin" "/usr/X11R6/bin" "/usr/local/pgsql/bin" "/home/ecm/bin" "/usr/local/jdk/bin") * la procedure directory-files renvoie la liste des fichiers contenus dans un repertoire, mis a part le "." et ".." qu'on a du supprimer manuellement en Perl. * On utilise append pour creer une grosse liste de notre liste de listes (append '("un" "deux" "trois") '(1 2 3)) -> '("un" "deux" "trois" 1 2 3) * on imprime chaque element de cette liste, avec un retour a la ligne apres chaque element. Le lambda (f) cree une fonction anonyme qui prend un argument f, et le map applique cette fonction a chaque nom de fichier qu'on a dans notre liste. (map (lambda (x) (* x 7)) '(6 7 8)) -> '(42 49 56) Voila voila, meme en indentant correctement c'est plus court que la version Perl (et j'attends toujours une version sh :). Allez, une version Tcl qqun? (map (lambda (f) (display f) (newline)) (apply append (map directory-files ((infix-splitter ":") (getenv "PATH"))))) [1] http://www-swiss.ai.mit.edu/scsh/ "Go forth and write elegant systems programs." -- Eric Marsden emarsden @ mail.dotcom.fr It's elephants all the way down --- Le CULTe sur le ouebe > http://savage.iut-blagnac.fr/ La page de linux-31 > http://savage.iut-blagnac.fr/linux-31/