Вот тебе пример для понимания local. Кстати, $_ тоже глобальная переменная.
sub print_
{
print "$_\n";
}
$_ = 1;
print_;
{
local $_ = 2;
print_;
{
local $_ = 3;
print_;
}
print_;
}
print_;
my - обычные локальные переменные.
А еще до сих пор не вьеду, если обьявлять переменную без my (local), это что будет?
типа так:
В зависимости от режима строгости.
Если локальная переменная существует, то ей присваивается новое значение.
Если локальной нет, но есть глобальная, то ей присваивается новое значение.
Если нет глобальной и режим строгого синтаксиса (strict) отключен, то создается глобальная переменная.
Если нет глобальной и режим строгого синтаксиса включен, то выдается фатальная ошибка.
Вывод: всегда используй use strict.
Добавь себе в изучение еще слово "our" - объявление глобальных переменных.
use strict;
my $var = 1;
{
local $var = 2; # Ошибка! Глобальная переменная не объявлена ранее.
print "$var\n";
}
print "$var\n";
use strict;
our $var = 1;
{
local $var = 2;
print "$var\n";
}
print "$var\n";
На понимание локальных переменных:
use strict;
my $var = 1;
{
$var = 2;
print "$var\n";
}
print "$var\n";
use strict;
my $var = 1;
{
my $var = 2;
print "$var\n";
}
print "$var\n";