В каких случаях функцию 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