Vhaerun Posted April 9, 2008 Report Posted April 9, 2008 Nu eram un mare fan al recursivitatii , dar mi s-au cerut la lucru sa fac niste functii care traverseaza directoare & stuff , si a trebuit sa ma descurc .Am facut un walker care accepta ca parametri un director si un coderef , cu actiunea ce va fi luata asupra fiecarui fisier .Se poate ca el sa fie mai lent ca File::Find , teoretic codul ar trebui sa fie portabil ( desi nu l-am incercat decat pe windows ) .Cod :use strict;my $public_file = "";my $public_dir = "";sub list { my $zir = shift; my @lista; opendir(D,$zir) || do { print "nu pot deschide directorul $zir,sar!\n"; return; }; @lista = readdir(D); closedir(D); return @lista;}sub walk { my $dir = shift; my $code_ref = shift; my @tlist = list($dir); foreach my $file (@tlist) { next if($file eq "." || $file eq ".."); $public_file = $file; $public_dir = $dir; if(-d "$dir" . "/$file") { walk("$dir" . "/$file",$code_ref); } else { &$code_ref(); } }}Mod de folosire :- nu am facut un modul , asa ca fie faci un fisier .pl ce contine functiile list si walk si il incluzi , fie le tot copiezi in fiecare fisier ce le foloseste.Exemplu de folosire:- fiecare fisier se poate accesa prin $public_file si fiecare director se poate accesa prin $public_dir1 --- afiseaza toate fisierele .pl dintr-un director trimis ca parametru scriptului walk(shift,sub {print $public_dir . "/$public_file\n" if($public_file=~/\.pl$/i)});2 --- sterge toate fisierelewalk(shift,sub { `rm -f $public_file` }); Quote