Этот документ призван помочь разработчикам на Perl 5 быстро освоить и перейти к синтаксису и среде Perl 6, сравнивая их с Perlsyms по мере возможности.
В этом документе не будет подробно описываться синтаксис Perl 6. Вместо этого мы попытаемся объяснить реализацию соответствующего синтаксиса в Perl 5 в Perl 6. Для получения подробной информации о синтаксисе обратитесь к соответствующим документам.
Perl 6 в значительной степени унаследовал свободный стиль Perl. Однако в некоторых случаях неизбежно возникают синтаксические и реализационные отклонения от свободного стиля, например, в Perl 5 можно опустить пробел после ключевого слова (например, <while($x < 5)
> или my($x, $y)
). В Perl 6 это обязательно, как <while ($x < 5)
>, так и my ($x, $y)
. Тем не менее, в Perl 6 вы можете полностью опустить скобки: while $x < 5
. Это также относится к if, for и т. д.
В Perl 5 вы можете сохранить пробелы между массивом или хешем и индексом доступа, а также перед постфиксным оператором. Поэтому $seen {$_} ++
является допустимым, но теперь это не так, и должно быть %seen{$_}++
.
Если вам так удобнее, вы можете использовать обратную косую черту для экранирования пробелов, что позволяет им появляться в местах, где они обычно запрещены. Подробнее см. Пробелы.
Как упоминалось в <5to6-perlfunc.pod|/language/5to6-perlfunc>, в Perl 6 нет undef. Значение объявленной, но неинициализированной скалярной переменной равно типу переменной. Например, my $x;say $x;
выводит «(Any)», а my Int $y;say $y;
выводит «(Int)».
Комментарии начинаются с # и продолжаются до конца строки, как и в Perl 5.
Встроенные комментарии начинаются с #
, за которым следует обратная кавычка (#
), за которой следует открывающая скобка, а затем закрывающая скобка. Например:
if #`( why would I ever write an inline comment here? ) True {
say "something stupid";
}
Как и в Perl 5, pod можно использовать для создания многострочных комментариев, используя =begin comment
перед комментарием и =end comment
после комментария.
Одно из различий между Perl 5 и Perl 6 заключается в том, что Perl 6 считает строку "0"
истинной. Числовое значение 0
по-прежнему ложно, и его можно принудительно преобразовать в числовое значение с помощью префиксного оператора +
, чтобы сделать его ложным. Кроме того, в Perl 6 добавлен настоящий логический тип, поэтому в большинстве случаев доступны True и False, и вам не нужно беспокоиться о числовых истинах.
Большинство модификаторов операторов всё ещё доступны, хотя некоторые из них являются исключением.
Во-первых, цикл for — это единственный цикл, похожий на цикл foreach в Perl 5, и он больше не поддерживает циклы в стиле C. Для циклов в стиле C используйте loop, который больше не используется в качестве модификатора оператора.
В Perl 6 больше не поддерживается формат do {...} while $x, вместо этого используйте формат repeat do. Аналогично do {...} until $x.
Самое большое изменение заключается в том, что given теперь является официальной частью синтаксиса, подробности см. на этой странице.
next, last и redo остались без изменений.
continue было удалено, и вы можете реализовать ту же функцию, используя блок NEXT внутри тела цикла.
# Perl 5
my $str = '';
for (1..5) {
next if $_ % 2 == 1;
$str .= $_;
}
continue {
$str .= ':'
}
=begin code
# Perl 6
my $str = '';
for 1..5 {
next if $_ % 2 == 1;
$str ~= $_;
NEXT {
$str ~= ':'
}
}
Как уже упоминалось, цикл C-стиля for в Perl 6 заменён на loop. Чтобы написать бесконечный цикл, вам не нужен синтаксис C-стиля loop (;;), просто опустите выражение: loop {...}.
В Perl 5 for также используется для поддержки циклов в стиле C, которые эквивалентны foreach. В Perl 6 for используется только для циклов foreach.
Perl 6 начинает поддерживать настоящий оператор switch, представленный ключевым словом given, использующим when и default для обработки различных ветвей. Базовая структура:
given EXPR {
when EXPR { ... }
when EXPR { ... }
default { ... }
}
Для получения более подробной информации см. здесь.
goto, вероятно, остаётся таким же, как в Perl 5, но пока не реализован. См. https://design.perl6.org/S04.html#The_goto_statement для получения дополнительной информации.
... (а также !!! и ???) используются для создания заполнителя для предполагаемой функции. В Perl 6 использование немного сложнее, подробнее см. https://design.perl6.org/S06.html#Stub_declarations. То есть, хотя его функциональность была расширена в Perl 6, похоже, нет очевидной причины, по которой поведение заполнителей не должно оставаться нормальным.
POD в Perl 6 сильно отличается от POD в Perl 5. Самое большое отличие заключается в необходимости использования =begin pod и =end pod для начала и завершения содержимого pod. Есть и другие незначительные изменения (обратите внимание, что эти различия могут привести к тому, что обычные интерпретаторы pod не будут работать должным образом). Например, при написании этого документа я обнаружил, что ("|") имеет особое значение в коде и что вставка буквального "|" не ясна. Лучше всего использовать интерпретатор Perl 6 для проверки вашего pod, это можно сделать с помощью переключателя --doc, например, perl6 --doc Whatever.pod. Это приведёт к выводу всех проблем на стандартный вывод ошибок (в зависимости от местоположения установки perl6 вам может потребоваться указать местоположение Pod::To::Text). Для получения более подробной информации о документации Perl 6 см. https://design.perl6.org/S26.html.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )