Можно ли передавать 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.

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

Другие вопросы по тегам