J'utilise dans un script la librairie DBM:eep , tout fonctionne sauf une chose

j'implémente cette lib comme suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
tie %Ready, 'DBM::Deep', {
  'file'      => 'Ready.db',
  'locking'   => 0,
  'autoflush' => 0
} or die "Unable to tie the Ready Queue\n";
je l'utilise comme cela :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 {
      # Selection d'un serveur
      my ($name) = grep { ! exists $Wait{$_} } keys %Host;
      if ( scalar keys %{$Ready{$name}} > 0 ) {
        %$data = %{$Ready{$name}};
        # On reinitialise la "ready queue"
        $Ready{$name} = {};
 
        $Host{$name}{'_timeout'} = 1; # On met le serveur en attente
        $Host{$name}{'_time'}  = time; # date du dernier accès
        $Host{$name}{'_fetch'} = scalar keys %{$Ready{$name}};  # Nombre dans la "ready queue"     
        $Wait{$name} = 1; # On ajoute un référence au serveur dans la wait queue
      }
  }

j'envoie le contenue de $data via un socket comme cela :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
  print $socket Storable::nfreeze($data);
  print $socket "\neov\n";

Mon problème est que mon script bug car Storable considère $data comme un GLOB alors qu'en faisant un print ref($data), "\n"; j'obtient bien un hash.

Sa fait 2 heures que je cherche le problème et j'ai épuisé mon stocke d'idées, le problème semble venir de DBM:eep car quand je ne tie() pas %Ready tout vas bien !!!

Voici la trace que perl me donne :


Uncaught exception from user code:
Can't store GLOB items at ..\..\lib\Storable.pm (autosplit into ..\..\lib\auto\Storable\_freeze.al) line 290, at G:/Program Files/Perl/site/lib/Engine/Scheduler/Scheduler.pm line 307
at G:/Program Files/Perl/site/lib/POE/Resource/Events.pm line 271
POE::Kernel::_data_ev_dispatch_due('POE::Kernel=ARRAY(0x202ec7c)') called at G:/Program Files/Perl/site/lib/POE/Loop/Select.pm line 315
POE::Kernel::loop_do_timeslice('POE::Kernel=ARRAY(0x202ec7c)') called at G:/Program Files/Perl/site/lib/POE/Loop/Select.pm line 323
POE::Kernel::loop_run('POE::Kernel=ARRAY(0x202ec7c)') called at G:/Program Files/Perl/site/lib/POE/Kernel.pm line 1255
POE::Kernel::run('POE::Kernel') called at G:/Program Files/Perl/site/lib/Engine/Scheduler/Scheduler.pm line 175
Engine::Scheduler::Scheduler::_run_processing('Engine::Scheduler::Scheduler=HASH(0x2399a44)') called at C:\Documents and Settings\Scaleo2007\Bureau\Scheduler.pl line 19