1

如果我有它的内存位置,是否可以重新创建 Net::Telnet 连接?

如何将 Net::Telnet=GLOB(0x1b50ff0) 字符串再次转换为 Net::Telnet 对象?

谢谢。

4

1 回答 1

1

更新

不能在 2 个单独的进程中重新使用您的对象,正如您尝试执行的评论所显示的那样 - 一个不会看到另一个的内存/地址空间。您只能做以下三件事之一:

  1. 从头开始重新创建对象,使其成为不同程序中另一个对象的副本,但前提是对象的类支持序列化/反序列化(通常通过使用 Data::Dumper、Storable 或其他方法保存对象状态来完成) . 我不知道 Net::Telnet 是否可以这样处理。

    为了清楚起见,您的第二个程序将在反序列化后获得对象的 COPY,这与原始对象无关。

  2. 允许客户端与服务器对话并发送 Telnet 命令,服务器将这些命令传递给 Net::telnet 对象并告诉客户端结果。基本上,服务器充当客户端的 telnet 代理。客户端应通过其 ID 引用服务器的 Net::Telnet 对象,如我原始答案中的注册表说明中所述。

  3. 如果客户端和服务器位于同一物理服务器上,则使用共享内存来存储 Net::Telnet 对象。


原始答案

您可以尝试查看取消字符串化引用的Acme::Ref ......我从未使用过它,因此不能保证它可以正常工作或特别适用于 Net::telnet。

我同意上面发布的评论,如果您需要这样做,您很可能没有对您的潜在问题应用正确的解决方案 - 如果您提供更多关于您试图实现高水平的细节,这将有所帮助。

与对象引用相反,您几乎不必处理字符串化引用。如果您在自己的流程范围内,那么您可以传递对象引用(或者如果您确实必须将其设为全局)。如果您正在使用某种进程间通信并且外部进程需要引用程序中的 Net::Telnet 对象之一,则需要创建 Net::Telnet 对象的注册表(可能只是一个数组)和通过注册表中的索引引用它们。

于 2010-06-22T13:05:15.523 回答