Странные люди требуют непонятного :-)># Переменные объявленные как my (например my $var)-
># не включаются в таблицу имен (*var)
># и не имеют адреса по которому к ним можно обратиться (может если угадать.. ?)
Какие ещё таблицы? Будьте проще: это просто локальные переменные, которые живут только пока выполняется блок, где они объявлены.
># Если передать их адресс какой-либо переменной $tmp,
># то переменная $var автоматически поменяет свой адрес (типа компилятором.. ?)
Это не так. Переменная будет иметь один и тот же адрес, пока не завершится блок, где она объявлена. После этого переменная исчезает (на самом деле всё немного сложнее, но в первом приближении так). При следующем входе в этот блок создаётся новая переменная с тем же именем.
Да, и бросьте вы эту чехарду с адресами - всё-таки на языке высокого уровня пишете.
># (p.s. нельзя локализовать local $var после объявления my $var)
Ой, что-то вы не того хотите, чует моё сердце. Почитайте perlsub: local - это совсем не то, что кажется на первый взгляд.
>#ВОПРОС - если perl интерпретируемый язык - то откуда этот "компилятор"?
Ну вообще-то интерпретатор имеет право что-то там компилировать во внутренне представление для собственных нужд. В чём проблемы?
В вашем примере программы всё происходит именно так, как и написано, никаких странностей. Только непонятно, зачем всё это. Чего вы добиваетесь? Какого эффекта ждёте?