Problème étrange avec DBM::Deep
J'utilise dans un script la librairie DBM::Deep , tout fonctionne sauf une chose
j'implémente cette lib comme suit :
Code:
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:
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:
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::Deep car quand je ne tie() pas %Ready tout vas bien !!!
Voici la trace que perl me donne :
Citation:
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