注意:当我说"无效引用"时,我指的是指向无数据的引用.
假设我们有以下包含循环引用的数据结构:
+-----------------------------------------------------+
| |
+-->+============+ +==========+ |
[ Reference ----->[ Blessed ] |
$parent -->+============+ [ Hash ] |
[ ] +==========+ |
[ children --->[ Array ] |
[ ] [ ] |
+==========+ [ 0: ---------+ |
[ ] | |
+==========+ | |
| |
+--------------------------------------------------+ |
| |
+-->+============+ +==========+ |
[ Reference ----->[ Blessed ] |
$child --->+============+ [ Hash ] |
[ ] |
[ parent: ----------------------+
[ ] …Run Code Online (Sandbox Code Playgroud) 我的问题是关于Perl如何在内部管理对象的数据.
在Perl中创建对象时,新子例程通常会返回对受祝福对象的引用.
以下面的代码为例:
# Create a new object
my $object = Object->new(%data1);
# Create a new object with the same variable
$object = Object->new(%data2);
Run Code Online (Sandbox Code Playgroud)
从第一次打电话到new我们创建一个$object引用一些祝福的人%data1
视觉表现:
"\"表示引用.
$object ????> \{bless %data1}
Run Code Online (Sandbox Code Playgroud)
这在内存中看起来如下:
"&"表示地址
MEMORY:
----------------------------------
&{bless %data1} ????> bless %data1
Run Code Online (Sandbox Code Playgroud)
然后用第二次调用new的值$object改为引用其他一些祝福%data2
视觉表现:
$object ??/ /??> \{bless %data1} # The connection to %data1 is broken
?
????????????> \{bless %data2}
Run Code Online (Sandbox Code Playgroud)
现在内存看起来像这样:
MEMORY:
----------------------------------
&{bless %data1} ????> bless %data1
&{bless %data2} ????> bless …Run Code Online (Sandbox Code Playgroud)