my $task
print Dumper($task)
На данный момент, Perl не знает, что делать автовивификации.Он передает ссылку LVALUE $ task в Dumper, которая ничего не делает с этой ссылкой, поэтому ничего не происходит
my $a = $task->{parent_id}
Поскольку это копия, она обрабатывается как RVALUE.Таким образом, вивификация не требуется.
my $b = testsub($task->{parent_id})
Чтобы правильно заполнить @_
ссылками LVALUE, perl теперь должен создать хеш, чтобы он мог правильно передать ссылку.
Чтобы избежать выполнениятаким образом, вы можете передать ссылку на $task
, а затем при необходимости получить доступ к parent_id
внутри:
sub testsub { my $task_ref = shift; if (something) { $$task_ref->{parent_id} = 3 } }
my $b = testsub(\$task);