Шаг 119.
В каких случаях функцию local() нельзя заменить функцией my() (продолжение)

    На этом шаге мы рассмотрим второй случай использования функции local().

    На этом шаге рассмотрим второй случай.

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

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

#! perl -w
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;
}
print FILEHANDLE "Еще одна строка в файл 'b'\n";
close FILEHANDLE;
Текст этого примера можно взять здесь.

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

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

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

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

#! perl -w
# функция NumberOfArgs() возвращает число своих параметров
sub NumberOfArgs
{
  return $#_ + 1;
} 
print  "NumberOfArgs: число параметров=" , NumberOfArgs(1,2,3,4)," \n" ;
{
  local *Numbers = *NumberOfArgs;
  print "Numbers: число параметров=", Numbers (1,2,3), "\n";
}
{
  local *N = \&NumberOfArgs;
  print "N: число параметров=", N(1,2), "\n";
}
Текст этого примера можно взять здесь.

    Результаты выполнения приведены на рисунке 1.


Рис.1. Результаты работы примера

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг