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



         

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


Первое значение области ввода $_= 11111111llllaaaabbbbcccc Второе значение области ввода $_= 222222222222ddddeeeeffff Третье значение области ввода $_= 3333333333 ; 33gggghhhhiiii Восстановленное значение области ввода $_= lilllllllllllaaaabbbbcccc

  • Создание локального дескриптора файла, каталога или локального псевдонима для функции.
  • В следующем примере функция 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.




    Содержание  Назад  Вперед