例如:
use strict;
use warnings;
use Devel::Peek;
Dump({});
将打印以下内容:
SV = IV(0x170fc98) at 0x170fca8
REFCNT = 1
FLAGS = (TEMP,ROK)
RV = 0x170fa68
SV = PVHV(0x1715970) at 0x170fa68
REFCNT = 1
FLAGS = (SHAREKEYS)
ARRAY = 0x0
KEYS = 0
FILL = 0
MAX = 7
RITER = -1
EITER = 0x0
似乎SV = IV(0x170fc98) at 0x170fca8(一个数字,IV,标量)引用了PVHV(散列)< strong>SV = PVHV(0x1715970) 在 0x170fa68
我期待的是这样的:
SV = PVHV(0x1715970) at 0x170fa68
REFCNT = 1
FLAGS = (SHAREKEYS)
ARRAY = 0x0
KEYS = 0
FILL = 0
MAX = 7
RITER = -1
EITER = 0x0
最佳答案
Perl 中的每种数据类型都有一个通用的数据“头”,提供引用计数等。此头中的标志决定了它实际是什么类型(例如 PVHV
)。所以在内部 %hash
是一个 PVHV
。 header 后跟其他特定于哈希的字段。
现在什么是$reference =\%hash
?引用是包含指向另一种数据类型的指针的标量。这是作为 IV
中的整数字段实现的,但是 ROK
标志被设置为表明数据不是整数而是指针。
您只能将标量传递给 Perl 子例程,因此您只能传递一个散列引用,而不能将散列本身传递给 Dump
。当 Dump
打印出您提供的任何标量时,还会显示封闭的引用。
为了更好地理解 Perl 中的内部数据类型,我推荐 Illustrated Perl Guts .
关于perl - 所有引用都以标量形式存在吗?甚至是明确的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20872857/