local $var
сохраняет значение $var
и добавляет директиву в стек, что приведет к восстановлению значения $var
при выходе из области (даже по исключению). Это самая близкая вещь к my
, которая доступна для переменных пакета.
$_ = 123;
{
local $_ = 456;
# $_ is 456 here.
}
# $_ is back to being 123 here.
Это полезно, чтобы избежать проблем в окружающем коде или в вызывающей программе (в случае сабвуферов).
Обратите внимание, что значение $/
соответствует символьному символу. Это не рассматривается как регулярное выражение.
Обратите внимание, что $/
, по-видимому, задано без причины в коде, который вы опубликовали (если вы что-то не указали).
почему я не могу просто использовать $/ = "^>"
Тогда изменение не будет отменено в конце блока, поэтому оно повлияет на <>
в условии while
, а также на любой код после цикла, который выполняет чтение.
Как мне обработать файл FASTA:
my ($header, $seq);
while (1) {
my $line = <>;
if (!defined($line) || $line =~ /^>/) {
work($header, $seq) if defined($header);
last if !defined($line);
chomp($line);
$header = substr($line, 1);
$seq = "";
} else {
chomp($line);
$seq .= $line;
}
}