Подтвердить что ты не робот

Перл и срок действия локальных переменных

Сколько времени занимает память, выделенная локальной переменной Perl для (как для массивов, хэшей и скаляров)? Например:

sub routine
{  
  my $foo = "bar";  
  return \$foo;  
}  

Вы можете получить доступ к строке "bar" в памяти после возврата функции? Как долго он будет жить, и похож ли он на статическую переменную в C или больше, как переменная, объявленная с кучи?

В принципе, имеет ли это смысл в этом контексте?

$ref = routine()  
print ${$ref};
4b9b3361

Ответ 1

Да, этот код будет работать нормально.

Perl использует подсчет ссылок, поэтому переменная будет работать до тех пор, пока кто-то ссылается на нее. Perl лексические переменные являются своего рода автоматическими переменными C, потому что они обычно уходят, когда вы покидаете область действия, но они также похожи на переменную на куча, потому что вы можете вернуть ссылку на один, и он будет работать.

Они не похожи на статические переменные C, потому что каждый раз, когда вы вызываете routine (даже рекурсивно), вы получаете новый $foo. (Perl 5.10 ввел переменные state, которые скорее похожи на статику C.)