我相信我的头衔可能有点令人困惑,但这是我想要做的事情的要点。我知道这不是“正确的方法”,如果有可能,我会更好奇。
让我们说我有脚本:
#!/usr/bin/perl
use strict;
use warnings;
my $foo = "bar";
my $foo_location = int(\$foo);
print $foo_location;
这个的输出类似于136167064
如何使用该整数($ foo在内存中的位置),并使用该整数创建另一个引用$ foo的变量。
所以我想要做的是:
my $foo_reference = some_magical_function_call($foo_location);
允许修改$ foo_reference的解引用,修改$ foo的值。因此,无论什么魔法允许这个工作,
$$foo_reference eq $foo
评估为真
我想说我几年前就想到了这一点,但也许我疯了。
答案 0 :(得分:4)
无论如何,如果有人好奇的话:
#!/usr/bin/perl
use strict;
use warnings;
use B;
my $foo = "bar";
my $foo_location = int(\$foo);
my $real_ref = bless(\(0+hex sprintf("%0x",$foo_location)), "B::AV")->object_2svref;
print $$real_ref;
打印栏
的答案中找到了这一点