Perl Можно ли заново создать соединение Net :: Telnet, если у меня есть место в памяти? - PullRequest
1 голос
/ 22 июня 2010

Можно ли заново создать соединение Net :: Telnet, если у меня есть место в памяти?

как я могу превратить строку Net :: Telnet = GLOB (0x1b50ff0) в объект Net :: Telnetснова?

Спасибо.

1 Ответ

1 голос
/ 22 июня 2010

UPDATE

Вы не можете повторно использовать свой объект в 2 отдельных процессах, как это видно из ваших комментариев, которые вы пытаетесь сделать - один НЕ увидит память / адресное пространство другого. Вы можете сделать только одну из 3 вещей:

  1. Повторно создайте объект с нуля, чтобы он стал дубликатом другого объекта в другой программе, но только если класс объекта поддерживает сериализацию / десериализацию (обычно это делается путем сохранения состояния объекта с использованием Data :: Dumper , Хранимые или другие методы). Я не знаю, можно ли обработать Net :: Telnet таким образом.

    Просто чтобы прояснить, ваша вторая программа получит КОПИЮ объекта после десериализации, который не имеет ничего общего с исходным объектом.

  2. Разрешить клиенту общаться с сервером и отправлять команды Telnet, которые сервер передает объекту Net :: telnet и сообщает клиенту результат. По сути, сервер выступает в роли прокси-сервера telnet для клиента. Клиент должен ссылаться на объекты сервера Net :: Telnet через их идентификаторы, как указано в объяснении реестра в моем исходном ответе.

  3. Используйте разделяемую память для хранения объекта Net :: Telnet, если клиент и сервер находятся на одном физическом сервере.


ОРИГИНАЛЬНЫЙ ОТВЕТ

Вы можете попробовать посмотреть на Acme :: Ref , который не переводит ссылку в ссылку ... Я никогда не использовал ее, поэтому не могу гарантировать, что она работает хорошо или работает именно с Net :: telnet.

Я согласен с комментарием, размещенным выше, что, если вам нужно сделать это, вы, скорее всего, не применяете правильное решение для вашей основной проблемы - было бы полезно, если бы вы предоставили более подробную информацию о том, что вы пытаетесь достичь высокой уровень.

Вы почти никогда не должны иметь дело со строковой ссылкой, а не со ссылкой на объект. Если вы находитесь в пределах вашего собственного процесса, вы можете передать ссылку на объект (или сделать его глобальным, если вам действительно нужно). Если вы используете какой-то тип межпроцессного взаимодействия и внешний процесс должен ссылаться на один из объектов Net :: Telnet в вашей программе, вам нужно создать реестр объектов Net :: Telnet (может быть просто массивом) и ссылаться на них по индексу в реестре.

...