Иллюстрированный самоучитель по Perl

В каких случаях функцию local нельзя заменить функцией mу

Создание локального дескриптора файла, каталога или локального псевдонима для функции

В следующем примере функция local о используется для создания локального дескриптора файла внутри блока операторов.

#!/usr/bin/perl
open(FILEHANDLE,">b");
print FILEHANDLE "Новая строка в файл 'b'\n";
{
local *FILEHANDLE;
open(FILEHANDLE,">bb");
print FILEHANDLE "Новая строка в файл 'bb'\n";
close FILEHANDLE; }
{
local *FILEHANDLE;
open(FILEHANDLE,">bbb");
print FILEHANDLE "Новая строка в файл 'bbb'\n";
close FILEHANDLE; > J
print FILEHANDLE "Еще одна строка в файл 'b'\n"; close FILEHANDLE;

В результате выполнения данного сценария в текущем каталоге будут созданы файлы:

"b":
Новая строка в файл 'b'
Еще одна строка в файл 'b'
"bb":
Новая строка в файл 'bb'
"bbb":
Новая строка в файл 'bbb'

Заметьте, что во время выполнения операций с файлами "bb" и "bbb" файл "Ь" остается открытым.

Аналогичным образом может быть определено локальное имя для функции.

#!/usr/bin/perl
# функция NumberOfArgs() возвращает число своих параметров sub NumberOfArgs {
return $#_ + 1;
) '.. ' print "NumberOfArgs: число параметров=", NumberOfArgs(1.2.3.4),"\n"; {
local *Numbers = *NumberOf Args;
print "Numbers: число параметров=", Numbers (1, 2, 3}, "\n"; } {
local *N = \SNumberOfArgs;
print "N: число параметров=", N(1.2), "\n"; }

Результат выполнения:

NumberOfArgs: число параметров=4 Numbers: число параметров=3 N: число параметров=2

Временное изменение элемента массива или хеш-массива

В следующем примере внутри блока операторов временно изменяется значение одного элемента глобального хеш-массива %ENV, содержащего значение переменной $РАТН, входящей в состав среды интерпретатора UNIX shell.

tt!/usr/bin/perl
print "значение переменной среды \$РАТН:\n$ENV{PATH}\n"; {
local $ENV{PATH} = "/home/mike/bin";
I – print "временное значение переменной среды \$РАТН: $ENV{PATH}\n";
}
print "прежнее значение переменной среды \$РАТН:\n$ENV{PATH}\n";

Результат будет выведен в следующем виде:

значение переменной среды $РАТН:
/sbin: /usr/sbin: /usr/bin: /bin: /usr/XHR6/bin: /usr/local/ bin: /opt/bin
временное значение переменной среды $РАТН: /home/mike/bin
прежнее значение переменной среды $РАТН:
/sbin: /usr/sbin: /usr/bin: /bin: /usr/XHR6/bin: /usr/local/bin: /opt/bin
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.