J'utilise la fonction glob() afin de lister un répertoire seulement cela consomme une quantité de mémoire qui fait froid dans le dos, dans la fonction principal de mon script j'appelle ma routine comme cela
le code avec glob
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 print ">> Count Jobs\n"; my $count = $self->_run_scanner('count'); until ( $count > 0 ) { $count = $self->_run_scanner('count'); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 sub _run_scanner ($$) { my $self = shift; my $mode = shift; my @array = glob("$self->{Repository}[1]/*.task"); if ( $mode eq 'count' ) { return scalar @array; } my %data = map { $_ => undef } grep { $_ =~ s/$self->{Repository}[1]\/// } @array; foreach my $file ( keys %data ) { unless ( -r "$self->{Repository}[1]/$file" and -w "$self->{Repository}[1]/$file") { delete $data{$file}; } } return {} unless scalar keys %data > 0; foreach my $file ( keys %data ) { open(FILE, "$self->{Repository}[1]/$file") or die 'Unable to read crawler repository'; flock(FILE,2); binmode(FILE); local $/ = undef; my $content = <FILE>; flock(FILE,8); close(FILE); $data{$file} = Storable::thaw($content); } return \%data; }







Répondre avec citation

mais je peut lancer un ls depuis powershell


Partager