Humus numericus

Aller au contenu | Aller au menu | Aller à la recherche

R, Spip et autres

Mot-clé - python

Fil des billets

jeudi 24 août 2006

Comparaison d'un script simple en Perl, Python et Ruby

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...