Переключение с `>` на `<` разрушает мою однострочность - PullRequest
0 голосов
/ 23 января 2019

Я фильтрую строки с более чем 3 элементами с

perl -ne  'print if split > 2' file.txt

Но когда я хочу отфильтровать строки с менее чем 3 элементами, я не могу использовать

perl -ne  'print if split < 2' file.txt
#Unterminated <> operator at -e line 1.

Я могу обойти это с любым из этих

perl -ne 'print if not split > 2' file.txt
perl -ne 'print if 2 > split' file.txt

Но мне интересно, почему выражение терпит неудачу только для одного из <, >.

1 Ответ

0 голосов
/ 23 января 2019

После небольшого копания и просмотра комментариев к вашему посту, я думаю, что нашел ответ.Парсер пытается понять, что вы имеете в виду, когда видит split <.Без скобок при вызове split необходимо угадать, сколько аргументов вы передаете для split (требуется 0-3, см. perldoc -f split для получения дополнительной информации).

Из-за этого, похоже, предполагается, чтопо умолчанию вы пытаетесь вызвать его хотя бы с одним аргументом, который выглядит как начало нулевого дескриптора файла <>.Когда он видит, что он неполон, он печатает ошибку и прерывает работу.

Это объясняет, почему исправления прокомментировали вашу публикацию.Все они ясно дают понять, что split должен вызываться без аргументов, и синтаксический анализатор не должен искать выражение, а символ < можно затем рассматривать как оператор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...