gpt4 book ai didi

需要 perl 引用说明

转载 作者:行者123 更新时间:2023-12-02 03:01:34 26 4
gpt4 key购买 nike

直接来自 https://perldoc.perl.org/perlref.html

下面没看懂

 $$hashref{"KEY"}   = "VALUE";       # CASE 0
${$hashref}{"KEY"} = "VALUE"; # CASE 1
${$hashref{"KEY"}} = "VALUE"; # CASE 2
${$hashref->{"KEY"}} = "VALUE"; # CASE 3

案例1和案例2有什么区别?

我在想 ${} 中的任何东西都是指向某个地址的指针,所以它就像

my $hashref = \%hash;

${$hashref}{"KEY"} 实际上是 $$hashref{"KEY"} 并且这是取消引用 \%hash 并查找它是 "KEY"

${$hashref->{"KEY"}} ..我认为是.. ??我认为规则是最靠近左边的绑定(bind),所以我认为这也变成了 $$hashref->{"KEY"}。与 ${$hashref}{'KEY'} 相同。我理解错了吗?

最佳答案

情况0和情况1是等价的,这些你已经理解正确了。

案例 2 有点微妙:

${$hashref{"KEY"}} = "VALUE";

首先,这会执行 $hashref{"KEY"}查找 "KEY"在一个名为 %hashref 的哈希变量中.尽管它的名字是哈希,而不是哈希引用!这将返回该散列中的一个值。

接下来,我们将散列中的值取消引用为标量引用:${ ... } .

最后,我们分配一个 "VALUE"到标量引用目标。

情况 3 类似,但实际上使用了哈希引用。

如果我们重写案例 2 和案例 3,它们的关系可能会更清楚:

{ # Case 2
my %hash;
${ $hash{"KEY"} } = "VALUE";
}

{ # Case 3
my %hash;
my $hashref = \%hash;
${ $hashref->{"KEY"} } = "VALUE";
}

补充说明:

  • ${ … }取消引用运算符不会绑定(bind)到最靠近左侧的位置,它包含 将被取消引用的值。 $$foo形式是 ${ … } 的缩写形式如果引用是普通标量变量而不是更复杂的表达式,则取消引用运算符。这不仅适用于标量引用,还适用于数组引用(@{ … }@$foo)和散列引用(%{ … }%$foo)。

  • 解引用运算符的印记 ($ % @) 不是引用的类型,而是取决于我们是否正在访问引用目标中的一个或多个值。

    当我们访问散列中的单个值时 %hash这看起来像 $hash{"KEY"} .

    当我们访问 $hashref 中的单个值时, 这看起来像 $hashref->{"KEY"}${$hashref}{"KEY"}$$hashref{"KEY"} .

    尽管 $这里没有标量引用。标量解引用运算符 ${ … }本质上是一个独立于散列引用下标运算符 ${ … }{ … } 的运算符.

  • 表达式$$foo->{"KEY"}具有对哈希引用的标量引用!首先是标量引用 $foo被取消引用 $$foo到哈希引用,其中一个值 …->{"KEY"}被访问。

关于需要 perl 引用说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45720766/

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