Подтвердить что ты не робот

Perl не жалуется на недостающие точки с запятой

Я только что нашел на своем Ubuntu, что Perl не жалуется на точку с запятой в конце. Проверьте следующий код:

#!/usr/bin/perl
use warnings;
use strict;

my @array = (1, 2, 3, 4);

foreach (@array)
{
    print $_."\n"
}

print "no, this cant be true"

Обратите внимание, что точка с запятой ";" отсутствует в заявлении печати. Тем не менее код работает нормально.

ВЫВОД:

1
2
3
4
no, this cant be true

Если я поставил точку с запятой после печати, она все равно будет работать. Так что это сбивает меня с толку.

Не могли бы вы помочь мне понять, чего мне здесь не хватает, или есть ли какая-то очевидная идеология Perl, которую я пропустил?

4b9b3361

Ответ 1

От perldoc perlsyn:

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

Ваш оператор печати является последним оператором в блоке.

Опущение полуколоны не рекомендуется. Слишком легко забыть добавить его, если вы расширите блок позже.

Ответ 2

Я часто думаю о точках с запятой в Perl как разделители, а не о терминаторах, что делает это поведение намного легче привыкнуть.

Тем не менее, это вовсе не плохая идея всегда использовать точку с запятой, так как вам не нужно запоминать ее позже, если вы добавите больше операторов в конце блока, немного похожее на использование дополнительной запятой в список, чтобы вы не забыли добавить это позже (Perl игнорирует последнюю запятую, если после нее нет элемента списка).

Ответ 3

В документации Perl:

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