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

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');
  }
le code avec glob


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;
}