1.
my - резервирование имени переменной типов scalar, array, hash, в локальной таблице имен, по
отношению к блоку.
local - создание временной копии, по отношению к блоку.
директива my появилась лишь в 5-ой версии perl, до этого пользовались только директивой local.
Счас применение local оправданно лишь в случаях, когда нужно локальное действие системной
переменной, переменной типа typeglob или временное действие элемента массива. Во всех остальных
случаях strict будет ругаться. Используй это.
Пример local($_,*F,$hash{key},$array[2]);
Более живой пример:
my $cnt;
open(F,">file2");
{ local(*F); # Локальная копия F (typeglob). Предыдущий открытый файл не закроется при этом.
open(F," read(F,$cnt,-s "file1");
close(F);
}
print F $cnt;
close(F);
Еще:
{ local $0=\'bla bla\';
print $0."\\n";
}
print $0;
2.
ты каждый раз создаешь новую(!) копию переменной $data. Ничего там "чистится" и не должно.