Перевод официальной документации Perl 6.

Отличия между Perl 5 и Perl 6 (часть 3).

| 0 Comments | 0 TrackBacks

Сегодня перевел очередной кусочек спецификации Perl6::Perl5::Differences.


Perl6::Perl5::Differences - Отличия между Perl 5 и Perl 6

Блоки и Операторы

См. S04 если хотите узнать больше об операторах и блоках в Perl 6.

Не требуются скобки в управляющих структурах

    Раньше:    if ($a < $b) { ... }
    Теперь:    if  $a < $b  { ... }

Аналогично для while, for, и.т.д. Можно использовать скобки, но при этом придется соблюдать, чтобы был пробел после if, иначе это будет вызовом подпрограммы.

Теперь try {} вместо eval {}.

Теперь вместо блока eval используется try.

    Было:  
          eval { 
            ... 
          }; 
          if ($@) { 
            warn "ошибка: $@";
          } 
    Стало: 
          try  {
             # ...
             CATCH { warn "ошибка: $!" }
          }

CATCH обеспечивает больше гибкости в обработке ошибок. См. [S04]: "Обработчики исключений" для получения детальной информации.

foreach становится for

    Раньше:    foreach (@whatever) { ... }
    Теперь:    for @whatever       { ... }

Кроме того, изменился способ присвоения нечто другому, чем $_:

    Было:    foreach my $x (@whatever) { ... }
    Стало:   for @whatever -> $x       { ... }

Подобным образом можно извлекать несколько элементов одновременно:

    Было:     while (my($age$sex$location) = splice @whatever, 0, 3) { ... }
    Стало:    for @whatever -> $age, $sex, $location { ... }

(За исключением того, что версия for не уничтожает массив)

В спецификациях [S04]: "Оператор for" и [S29]: each об этом говорится подробнее.

for становится loop

    Было:     for ($i = 0; $i < 10$i++) { ... }
    Стало:    loop ($i = 0; $i < 10; $i++) { ... }

Также loop можно использовать для создания бесконечных циклов:

    Было:     while (1) { ... }
    Стало:    loop { ... }

Регулярные выражения и "правила"

В примере ниже иллюстрируется простая трансляция регулярного выражения Perl5 в Perl6:

    Было:     $str =~ m/^\d{2,5}\s/i
    Стало:    $str ~~ m:P5:i/^\d{2,5}\s/

Здесь используется модификатор :P5. Так как стандартный синтаксис Perl6 достаточно разнообразный, 'P5' отмечает где необходима совместимость с синтаксисом Perl5. Для замены:

    Было:     $str =~ s/(a)/$1/e;
    Стало:    $str ~~ s:P5/(a)/{$0}/;

Обратите внимание, что первый буфер захвата не $1, как было раньше, а $0, а модификатор /e удален в пользу встроенной закрытой нотации.

Данная тема подробно рассматривается в спецификации S05. См. также:

Связанный с ним Апокалипсис (анг. Apocalypse), в котором объясняются изменения:

  http://dev.perl.org/perl6/doc/design/apo/A05.html

И связанная с ним Экзегеза (анг. Exegesis), где данная тема объясняется более детально:

  http://dev.perl.org/perl6/doc/design/exe/E05.html
Продолжение следует ...

No TrackBacks

TrackBack URL: http://blog.perl6doc.ru/mt-tb.cgi/30

Leave a comment

About this Entry

This page contains a single entry by Dinar published on August 15, 2010 11:03 PM.

Отличия между Perl 5 и Perl 6 (часть 2). was the previous entry in this blog.

Отличия между Perl 5 и Perl 6 ( Объекты ) is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.