Это игра в гольф. Флаг -e
означает выполнение остальной части командной строки как программы. -l
включает автоматическую обработку конца строки.
Часть <.* *>
представляет собой шар, содержащий два шаблона для расширения: .*
и *
.
Эта часть
(q=not =)
представляет собой список, содержащий одно значение — строку «не». q=...=
— это альтернативный разделитель строк, который, по-видимому, используется, потому что одинарная кавычка используется для цитирования однострочника.
Часть [...]
является индексом в этом списке. Значение нижнего индекса будет либо 0 (значение «не»), либо 1 (ничего, что печатается как пустая строка) в зависимости от результата этого сравнения:
2 == (()=<.* *>)
Здесь много чего происходит. Сравнение проверяет, вернул ли glob список ровно из двух элементов (предполагается, что это .
и ..
), но как это сделать, сложно. Внутренние скобки обозначают пустой список. Присвоение этому списку помещает глобус в контекст списка, так что он возвращает все файлы в каталоге. (В скалярном контексте он ведет себя как итератор и возвращает только один за раз.) Само присваивание оценивается в скалярном контексте (находится в правой части сравнения) и, следовательно, возвращает количество назначенных элементов.
Ведущий +
предназначен для того, чтобы Perl не анализировал список как аргументы для print
. Завершающий .empty
объединяет строку «пусто» с тем, что вышло из списка (то есть либо «не», либо пустая строка).
person
Michael Carman
schedule
14.07.2009