Forum Webscript.Ru
Программирование => Perl => Тема начата: darkyn от 11 Октября 2006, 16:17:26
-
появилась необходимость хранить множество информации о каждом работающем потоке в общем хеше.
что бы было понятней сразу часть кода:
my %MODULES :shared = () ;
потом в определенный момент хеш заполняется параметрами
$MODULES{$mod_name} = (
\'subs\' => {constructor=>\'\',destructor=>\'\',entrypoint=>\'\'},
\'info\' => {}, \'messages\' => [] );
здесь-то и появляется ошибка "Invalid value for shared scalar" =(
это какие-то ограничения на shared переменные?
как правильно реализовать наполнение хеша $MODULES?
-
$MODULES{$mod_name} ={ ... } ?
-
ошибся со скобками в первом посте. у меня в коде так и прописано. вот только пока хеш %MODULES не является shared всё нормально присваевается, когда объявлю его как :shared сразу начинает ругаться той же ошибкой "Invalid value for shared scalar"
сделал маленький тест:
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
use threads;
use threads::shared;
my %MODULES :shared = () ;
my $name = \'test_key\';
$MODULES{$name } = {
\'subs\' => {c=>\'\',d=>\'\',e=>\'\'},
\'info\' => {},
\'messages\' => [] };
print "\\r\\n";
print Dumper(\\%MODULES);
print "\\r\\n";
как же всё это заставить работать?) и в чём именно проблема?)
-
from perldoc threads::shared
---
The only values that can be assigned to a shared scalar are other scalar values, or shared refs:
my $var :shared;
$var = 1; # ok
$var = []; # error
$var = &share([]); # ok
-
вот так всегда. спешишь, спешишь... а всё лечит rtfm ; )
-
немного продолжая тему:
при попытке:
...
$constructor = \\&some_function ;
$MODULES{$name}{subs}{constructor} = $constructor ;
...
^^^ вылетает с ошибкой \'Invalid value for shared scalar\'
[?] возможно ли это? и каким образом можно положить в shared переменную ссылку на функцию?