Почему предложение 'if' в Perl должно содержать фигурные скобки или ничего? - PullRequest
5 голосов
/ 03 апреля 2011

Это нормально:

if ($some_var==$some_value) {}

Это тоже нормально:

print "hello" if ($some_var==$some_value);

Но возникает ошибка:

if ($some_var==$some_value) print "some_message";

Почему в Perl предложение 'if' должно иметь фигурные скобки или ничего?

Ответы [ 6 ]

9 голосов
/ 03 апреля 2011

Чтобы избежать общеизвестной проблемы в построении компилятора, известной как "висячий другой".Смотри http://en.wikipedia.org/wiki/Dangling_else

6 голосов
/ 03 апреля 2011

Вот как определяется синтаксис perl. Синтаксис if (expr) BLOCK требует блока, а не оператора. См. perlsyn (раздел «Составные операторы»).

Выдержка:

Оператор if прост. Поскольку блоки BLOCK всегда заключены в фигурные скобки, никогда не возникает двусмысленности, с которой может согласиться else.

5 голосов
/ 03 апреля 2011

Perl имеет довольно сложный синтаксис и его довольно сложно анализировать.Я понял, что фигурные скобки стали обязательными после предложения if, чтобы убрать неоднозначность и упростить синтаксический анализ кода Perl.

2 голосов
/ 03 апреля 2011

Я не знаю о кудряшках, но Ларри говорил, что паренсов можно было бы сделать необязательными. Я полагаю, что он решил не делать код читаемым.

2 голосов
/ 03 апреля 2011

if ($some_var==$some_value); не "хорошо тоже", когда я пытаюсь (и я не ожидал, что это будет).

Почему требуется БЛОК, а простой EXPR не разрешен? Потому что так хотел Ларри.

1 голос
/ 03 апреля 2011

Я считаю, что это просто не поддерживается, однако это: print "some_message" if($some_var == $some_value);

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