Специальная переменная Perl _
Недавно узнал о существовании специальной переменной Perl, которая называется "_". Да-да, это именно "_", а не $_.
Узнал от своего начальника и заядлого перловика о ней. Полез и почитал сам. Оказалось, что это не совсем переменная. Это дескриптор файла, что развеивает магию вокруг переменной без префикса "$".
Так что же делает этот дескриптор и откуда берется?
Рассмотрим код:
Сначала мы проверяем файл на существование. Но потом мы проверяем _ на предмет пустоты.
Дело в том, что для получения атрибутов команды -e, -d, -z и подобные неявно вызывают функцию stat для файла. И просто возвращают один из элементов результирующего массива. (Ведь мы помним, что функция stat возвращает массив)
Затем происходит кеширование результатов изъятия атрибутов для дескриптора файла _. И когда мы вызываем новую проверку атрибута файла для _, функция stat уже не вызывается, что несколько экономит время и ресурсы, да.
Вот такая небольшая хитрость.
------
Взято отсюда: Специальная переменная Perl _ - Блог SHAman'a
Узнал от своего начальника и заядлого перловика о ней. Полез и почитал сам. Оказалось, что это не совсем переменная. Это дескриптор файла, что развеивает магию вокруг переменной без префикса "$".
Так что же делает этот дескриптор и откуда берется?
Рассмотрим код:
if(-e "./path2/file.dat") { if(-z _) { print "OK"; } }
Сначала мы проверяем файл на существование. Но потом мы проверяем _ на предмет пустоты.
Дело в том, что для получения атрибутов команды -e, -d, -z и подобные неявно вызывают функцию stat для файла. И просто возвращают один из элементов результирующего массива. (Ведь мы помним, что функция stat возвращает массив)
Затем происходит кеширование результатов изъятия атрибутов для дескриптора файла _. И когда мы вызываем новую проверку атрибута файла для _, функция stat уже не вызывается, что несколько экономит время и ресурсы, да.
Вот такая небольшая хитрость.
------
Взято отсюда: Специальная переменная Perl _ - Блог SHAman'a
Комментарии:
1 Апреля 2019 (03:47:38)
peem1
• ответить
hello