标签: perl sockets hash reference dereference
HASH(0x991f0dc)
所以上面的哈希引用在标量变量中存储为字符串,如果我们的话 在Perl程序中用“%”取消引用它会引发错误,
Can't use string ("HASH(0x991f0dc) ") as a HASH ref while "strict refs" in use at tcpclient1.pl line 49, <GEN0> line 1
以上是从Perl程序抛出的,我请求解决方案,将哈希字符串引用转换回Perl哈希引用。
答案 0 :(得分:7)
您无法将其转换回来。
HASH(0x991f0dc)不是哈希引用。它是变量的字符串表示形式,包含对该地址的散列的引用。你在deref它时描述的错误信息表明你有类似的东西:
my $foo = 'HASH(0x991f0dc)'; print %$foo;
现在这不起作用,因为实际的数据结构不存在。
看起来你通过GEN0文件句柄读取了一个套接字。无论谁向你发送数据结构都是错误的。
GEN0
他们需要序列化数据,然后你需要反序列化它。这样做的好方法是JSON。但您也可以使用Storable或Sereal。