Можно ли передавать Perl хеш-ссылки между процессами?
У меня есть проект 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 ответа
Если это разные процессы, вам нужно либо сериализовать содержимое хеша, либо постоянно сохранять его в файле на диске. Чтобы сделать первое, см. Storable или Data:: Dumper; для последнего это зависит, является ли это хэш простых скаляров или что-то более сложное.
Если это один и тот же интерпретатор perl в том же процессе, вы можете оставить некоторую глобальную переменную, такую как% main:: hashes; задавать $main::hashes{\%Graph} = \%Graph
перед передачей строковой ссылки обратно вызывающему процессу, а затем используйте ее для поиска фактической ссылки на хеш.
Не делайте этого, однако: http://perlmonks.org/?node_id=379395.
Нет, вы не можете надежно передавать хеш-ссылки между процессами.