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, которую я пропустил?
Ответы
Ответ 1
От perldoc perlsyn:
Каждая простая инструкция должна быть завершена точкой с запятой, если только она не является заключительным оператором в блоке, и в этом случае точка с запятой является необязательной.
Ваш оператор печати является последним оператором в блоке.
Опущение полуколоны не рекомендуется. Слишком легко забыть добавить его, если вы расширите блок позже.
Ответ 2
Я часто думаю о точках с запятой в Perl как разделители, а не о терминаторах, что делает это поведение намного легче привыкнуть.
Тем не менее, это вовсе не плохая идея всегда использовать точку с запятой, так как вам не нужно запоминать ее позже, если вы добавите больше операторов в конце блока, немного похожее на использование дополнительной запятой в список, чтобы вы не забыли добавить это позже (Perl игнорирует последнюю запятую, если после нее нет элемента списка).
Ответ 3
В документации Perl:
Каждый простой оператор должен быть прерван точкой с запятой, если только является заключительным утверждением в блоке, и в этом случае точка с запятой по желанию.