Что означает {в конце однострочного Perl? - PullRequest
2 голосов
/ 22 февраля 2010

Я видел этот однострочный

perl -lane '$_{$F[0]}+=$F[1]}print"$_ $_{$_}"for keys%_;{' file

здесь: Как суммировать значения в столбце на основе значения в другом столбце?

и я не помню, как работает "{" в конце. Может кто-нибудь объяснить, как это работает?

1 Ответ

16 голосов
/ 22 февраля 2010

Из справки Perl :

-n   assume "while (<>) { ... }" loop around program

Это чисто текстовая операция, поэтому она дает эту программу:

while (<>) { $_{$F[0]}+=$F[1]}print"$_ $_{$_}"for keys%_;{ }

Это злоупотребление переключателем -n, поскольку цикл while закрывается рано из-за несоответствия } в исходной программе. Но закрывающий }, добавляемый переключателем -n, все равно должен что-то совпадать, и поэтому в конце программы должен быть дополнительный {, хотя он ничего не делает.

Другими словами, единственная причина, по которой последний { - это отсутствие синтаксической ошибки.

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