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