PERL : remplacement récursif

Fermé
bob-312 Messages postés 1 Date d'inscription lundi 1 novembre 2010 Statut Membre Dernière intervention 1 novembre 2010 - Modifié par bob-312 le 1/11/2010 à 15:08
Bonjour,

Je suis débutant en PERL et je dois faire un script qui doit remplacer toutes les occurences du nombre 34 par le nombre 99 dans tous les fichiers c contenus dans le répertoire courant mais aussi dans tous les autres sous-répertoires (il y en a beaucoup, ce sera fastidieux de le faire à la main). Pour cela j'ai essayé 2 méthodes mais qui n'ont pas abouti :

la 1ère :
j'ai créé le script suivant :

#!/bin/perl

@ARGV= glob "*.c";

while (my $ligne = <>) {

$ligne =~ s/34/99/;

print $ligne;
}

que j'appelle de la manière suivante :
find . -name "*.c" -exec perl -i script.pl {} \;
J'utilise le find pour appliquer le script à tous les fichiers c trouvés mais l'exécution de ce script ne modifie que les fichiers du répertoire courant et pas ceux des sous-répertoires.

la 2ème :
j'ai créé le script suivant :
#!/bin/perl

use File::Find;

sub process_file {
while (my $ligne = <>) {
$ligne =~ s/34/99/;
print $ligne;
}
}

find(\&process_file, $ARGV[0]);

que j'appelle de la manière suivante :
perl -i script_2.pl *.c

mais la encore même résultat que précédemment, les fichiers des sous-répertoire ne sont pas modifiés.

Quelqu'un aurait-il une idée?


Bob-312