gpt4 book ai didi

perl - 所有引用都以标量形式存在吗?甚至是明确的?

转载 作者:行者123 更新时间:2023-12-02 08:36:26 24 4
gpt4 key购买 nike

例如:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com