tttDossier.pm

package tttDossier;

use strict;

use warnings;

use diagnostics;

use utf8;

use Exporter;

our @EXPORT = qw(&tttArborescence);

our @ISA = qw(Exporter);

use Cwd 'abs_path'; # pour reconstituer le chemin absolu d'un fichier

use File::Spec; # pour écrire des chemins correctement dans tous les systèmes

use utile;

use erreur;

#------Définition fonction

Définitions des fonctions

tttArborescence


sub tttArborescence {

# lance un traitement sur tous fichiers compris dans l'arborescence du dossier en entrée. On peut spécifier une liste d'extensions pour filtrer les fichiers à traiter.

# entrée : dossier/fichier

# traitement : [nomFonction,param1,param2...]

# extensions : ext1,ext2... (facultatif)

# la fonction passée en paramètre pour la traitement des fichiers doit avoit le fichier input comme premier argument

my ($file,$traitement,@extensions) = @_;

$file = abs_path($file);

if (-f $file){ # si c'est un fichier avec une bonne extension

if ( (@extensions && utile::bonneExtension($file,@extensions) ) || !(@extensions) ){

# on lui applique le traitement

my ($fonction,@param)=@$traitement;

&$fonction($file,@param);

}

}elsif(-d $file){ # si c'est un dossier

opendir(DIR, $file) or erreur::affiche("ouvertureD",$file); # on l'ouvre

foreach my $subfile ( grep(!/^\.{1,2}/,readdir(DIR)) ){ # et chacun de ses elements

$subfile = File::Spec->catfile( $file,$subfile ); # est renommé en adresse absolue

tttArborescence($subfile,$traitement,@extensions); #et traité récursivement

}

closedir(DIR);

}

}