Язык программирования Perl

пример отсюда -> http://citforum.ru/internet/perl_tut/syntax.shtml

$var = 1;
$var2 = 3 if $var > 0;

; почему не стоит после 3 ?, а стоит после условии...

А почему условие присваивется к переменной ? почему отдельно не написать ? как это может быть полезно ?


Ответы (1 шт):

Автор решения: Mike

Ларри Уолл, лингвист и заодно создатель языка perl решил сделать его похожим на английский язык. В Английском языке принято писать "assign var2 5 if var > 0" ("Присвоить var5 пять, если var больше 0") поэтому и язык perl унаследовал такой синтаксис записи одиночных условий. Условие пишется после выполняемого действия, без каких либо разделителей вроде точки с запятой, в случае если действие одно. И да, это очень не привычно, по сравнению с большинством других языков программирования.

Указанную строку можно написать на perl минимум двумя способами:

$var2 = 3 if $var > 0;  # Первый способ, унаследованный от английского

if $var > 0 {           # Второй способ, фигурные скобки обязательны.
    $var2 = 3           # А вот точка с запятой после единственного выражения внутри блока скобок
                        # не обязательна, но может и присутствовать
}

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

P.S. По замечанию @nörbörnën добавлю, что само по себе наличие фигурных скобок в конструкции (а они требуются во втором варианте) могут накладывать ограничения связанные с областями видимости. Так как любой блок в фигурных скобках в perl имеет собственную лексическую область видимости, то переменные объявленные лексическими (my) или статическими (state) внутри блока, окажутся не доступны снаружи. А локальные (local) вернут свое изначальное состояние за пределами блока. Так же может меняться поведение некоторых других конструкций, зависящее от лексических областей видимости.

→ Ссылка