Как я могу сделать, чтобы переменная Perl ссылалась на другую переменную по ее целочисленной ссылке - PullRequest
2 голосов
/ 28 марта 2011

Я считаю, что мой титул может быть немного запутанным, но вот суть того, что я пытаюсь сделать.Я знаю, что это не «правильный способ» сделать это, мне просто любопытно, если это возможно.

Итак, допустим, у меня есть сценарий:

#!/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

оценил бы как истинное

Я хочу сказать, что я понял это пару лет назад, но, возможно, я сумасшедший.

1 Ответ

4 голосов
/ 28 марта 2011

Ах, да! Я нашел ответ. Я, наверное, должен был подождать, прежде чем опубликовать это.

В любом случае, если кому-то интересно:

#!/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;

Панель печати

Я понял это из ответа на этот вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...