Как изменить переменную внутри подпрограммы?

62
6

Следующий код

use strict;

my $var = new();
foreach (1..3){
print $var->{val},"\t",$var->{inc}(),"\n";
}

sub new{
my $foo = 0;
return {
val => $foo,
inc => sub {
# do something with $foo
$foo++;
}
};
}

дал результат:

0    0
0 1
0 2

Поэтому мы не можем изменить $foo внутри подпрограммы $var{inc}, установив $var{val}. Есть какой-либо способ сделать это? Вероятно, одна переменная my $foo разделилась на две разные сущности в той же области (?) Что происходит с my $foo в этой программе с точки зрения объема и продолжительности?

спросил(а) 2021-01-19T17:03:49+03:00 2 месяца, 3 недели назад
1
Решение
106

Вам нужно будет сохранить ссылку на $ foo в hashref, то есть val => \$foo. В настоящее время вы сохраняете только значение, поэтому оно не будет обновляться.

Обязательно разыщите его при доступе, т. print ${$var->{val}}

ответил(а) 2021-01-19T17:03:49+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема