Jump to content
Vhaerun

Perl Filewalker

Recommended Posts

Posted

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_dir

1 --- 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 fisierele


walk(shift,sub { `rm -f $public_file` });

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...