1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/ijz-perl6doc

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
cn5to6-perlsyn.md 9.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 16:41 a98426f

От Perl 5 к Perl 6: руководство по синтаксису

Обзор

Этот документ призван помочь разработчикам на 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 ~= ':'
    }
}

Цикл for

Как уже упоминалось, цикл C-стиля for в Perl 6 заменён на loop. Чтобы написать бесконечный цикл, вам не нужен синтаксис C-стиля loop (;;), просто опустите выражение: loop {...}.

Циклы foreach

В Perl 5 for также используется для поддержки циклов в стиле C, которые эквивалентны foreach. В Perl 6 for используется только для циклов foreach.

Оператор switch

Perl 6 начинает поддерживать настоящий оператор switch, представленный ключевым словом given, использующим when и default для обработки различных ветвей. Базовая структура:

given EXPR {
    when EXPR { ... }
    when EXPR { ... }
    default { ... }
}

Для получения более подробной информации см. здесь.

Операторы goto

goto, вероятно, остаётся таким же, как в Perl 5, но пока не реализован. См. https://design.perl6.org/S04.html#The_goto_statement для получения дополнительной информации.

Заполнительные утверждения

... (а также !!! и ???) используются для создания заполнителя для предполагаемой функции. В Perl 6 использование немного сложнее, подробнее см. https://design.perl6.org/S06.html#Stub_declarations. То есть, хотя его функциональность была расширена в Perl 6, похоже, нет очевидной причины, по которой поведение заполнителей не должно оставаться нормальным.

PODs: встроенные документы

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/ijz-perl6doc.git
git@api.gitlife.ru:oschina-mirror/ijz-perl6doc.git
oschina-mirror
ijz-perl6doc
ijz-perl6doc
master