Tiens, suite à une question d'un collègue de boulot aujourd'hui, je me suis amusé à comparer la manière de faire une tâche assez simple dans trois langages de script différents. L'objectif est d'afficher le chemin complet de tous les répertoires contenus (récursivement) dans un répertoire donné (en l'occurrence /var/log
). Je trouve le résultat assez représentatif des particularités des différents langages :
En Python
import os from os.path import join for root, dirs, files in os.walk('/var/log'): for name in dirs: print join(root, name)
C'est pas forcément super intuitif (faut comprendre que la fonction os.walk
renvoit un tuple avec le répertoire racine, les répertoires contenus et les fichiers contenus de chaque sous-répertoire parcouru. Mais c'est assez efficace.
En Perl
use File::Find; find sub { print $File::Find::name, " " if -d } , '/var/log';
Ah bah c'est sûr, difficile de faire plus bref. Mais c'est pas forcément évident du premier coup d'oeil, entre l'utilisation d'une référence à une fonction en argument de find
, ou celui du test -d
.
En Ruby
require 'find' Find.find('/var/log') { |path| puts path if File.directory?(path) }
Et voilà. Simple, lisible, compact, compréhensible (du moins si on a compris le concept de bloc et d'itérateur). En un mot : é-lé-gant.
Bon, allez, je suis pas tout à fait objectif, je vous l'accorde...