Можно ли передавать Perl хеш-ссылки между процессами? - PullRequest
1 голос
/ 28 января 2011

У меня есть проект ActiveState PerlCtrl. Я хотел бы знать, возможно ли иметь хеш в COM DLL, передать его ref вызывающему процессу в виде строки (например, «HASH (0x2345)»), а затем передать эту строку обратно в COM DLL и каким-то образом Благослови его, указав на соответствующий хеш.

Кажется, что получить хеш-реф достаточно просто, используя return "" . \%Graph;, и я пробовал что-то вроде $Graph = shift; $Graph = bless {%$Graph};, но они, похоже, не достигают того, что мне нужно. Хэш% Graph является как минимум глобальным для модуля.

Код тестирования (VBScript):

set o = CreateObject("Project.BOGLE.1")
x = o.new_graph()
wscript.echo x
x = o.add_vertex(x, "foo")

Ответы [ 2 ]

4 голосов
/ 28 января 2011

Если это разные процессы, вам нужно либо сериализовать содержимое хеша, либо постоянно сохранять его в файле на диске. Чтобы сделать первое, смотрите Storable или Data :: Dumper; для последнего это зависит, является ли это хэш простых скаляров или что-то более сложное.

Если это один и тот же интерпретатор perl в том же процессе, вы можете оставить некоторую глобальную переменную, такую ​​как% main :: hashes; установите $main::hashes{\%Graph} = \%Graph перед передачей строковой ссылки обратно вызывающему процессу, а затем используйте ее для поиска фактической ссылки хеш-функции.

Не делайте этого, хотя: http://perlmonks.org/?node_id=379395.

0 голосов
/ 28 января 2011

Нет, вы не можете надежно передавать хеш-ссылки между процессами.

...