J'utilise dans un script la librairie DBM:eep , tout fonctionne sauf une chose
j'implémente cette lib comme suit :
je l'utilise comme cela :
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";
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
Partager