Выпуск 9. Ноябрь 2013

Использование HTML::FormFu при работе с Catalyst | Содержание | Обзор CPAN за октябрь 2013 г.

Обзор изменений Perl 5.19.5

20 октября 2013 г. был выпущен очередной релиз Perl для разработчиков 5.19.5. Особенным этот релиз делают несколько интересных возможностей, которые были добавлены в язык и будут включены в последующую стабильную версию, став ключевыми изменениями нового Perl.

Экспериментальная постфиксная запись разыменования

Данная экспериментальная возможность позволяет использовать постфиксную запись для разыменования ссылки с помощью комбинации символов сигила и звездочки, например:

@{ $ref->{foo} }

теперь можно записать так:

$ref->{foo}->@*

В обоих случаях будет возвращён массив.

Постфиксная запись более удобна тем, что позволяет читать и записывать выражение слева направо, без необходимости возвращаться к началу выражения, чтобы обособить его символами @{}.

Аналогично массиву определено разыменование и других типов:

$sref->$*;  # тоже самое, что и ${ $sref }
$aref->@*;  # тоже самое, что и @{ $aref }
$href->%*;  # тоже самое, что и %{ $href }
$cref->&*;  # тоже самое, что и &{ $cref }
$gref->**;  # тоже самое, что и *{ $gref }

Поскольку данный функционал является экспериментальным, то для того, чтобы его можно было использовать, требуется явно включить с помощью use feature, а также подавить предупреждения об использовании экспериментальной возможности:

no warnings "experimental::postderef";
use feature "postderef";

В случае, если требуется, чтобы постфиксная запись также интерпретировалась и внутри строк, необходимо дополнительно подключать возможность postderef_qq:

no warnings "experimental::postderef";
use feature "postderef", "postderef_qq";

print "$ref->{foo}->@*";

Постфиксную запись можно использовать и для получения срезов массивов и хешей:

$aref->@[1,2];          # тоже самое, что и @{$aref}[1,2]
$href->@{'foo','bar'};  # тоже самое, что и @{$href}{'foo','bar'}

Кроме того, в постфиксной записи доступен и новый синтаксис среза, появившийся в Perl 5.19.4, для получения хеш-среза:

%h = $href->%{'foo','bar'} # тоже самое, что и %h = %{$href}{'foo', 'bar'};
%h = $aref->%[3,4,6];      # тоже самое, что и %h = %{$aref}[3,4,6];

Рассмотрим пример обхода сложной структуры:

for my $key (keys %{$href}) {
    for my $subkey (keys %{$href->{$key}}) {
        push @{$href->{$key}->{$subkey}->{foo}},
            @{$href->{$key}->{$subkey}->{bar}}{'a','b'}
    }
}

Количество фигурных скобок просто зашкаливает, снижая читаемость и повышая шанс на ошибку. В новом синтаксисе всё выглядит уже не так плохо:

for my $key ( keys $href->%* ) {
    for my $subkey ( keys $href->{$key}->%* ) {
        push $href->{$key}->{$subkey}->{foo}->@*,
            $href->{$key}->{$subkey}->{bar}->@{'a','b'}
    }
}

В целом постфиксная запись разыменования должна работать во всех случаях, в которых работает и обычное разыменование в блоке (ци́ркумфикс), и является эквивалентной. Однако в некоторых ситуациях отличия могут появиться, например:

no strict 'refs';

my $foo = 'bar';
${my $foo = 'baz'} = 'qux';
print $foo; # напечатает 'bar'

my $foo = 'bar';
(my $foo = 'baz')->$* = 'qux';
print $foo; # напечатает 'baz';

В первом случае переменная $foo в блоке изолированна и не влияет на внешнюю переменную, а в постфиксной записи $foo переопределяется.

Альтернативная запись прототипа функции

В рамках работы над внедрением сигнатуры функции в ядро Perl, которую ведёт Peter Martini, в новом релизе Perl появилась возможность задавать прототип функции через специальный атрибут функции — prototype. Таким образом, следующие объявления прототипов функции эквивалентны:

sub foo($$){
    ...
} 

sub foo : prototype($$){
    ...
}

Объявление прототипа поддерживается и на уровне модуля attributes, т.е. запись:

use attributes __PACKAGE__, \&foo, "prototype(\$\$)";

также задаст прототип функции foo.

Никаких существенных преимуществ новая запись не даёт, но открывает возможности для дальнейшей работы над расширением синтаксиса функций.

Unicode 6.3

В Perl 5.19.5 включена поддержка новой версии Unicode 6.3 и, поскольку новая версия стандарта 7.0 ожидается только через год, то данная версия скорее всего и войдет в Perl 5.20. Основным новшеством в версии 6.3 стало появление специальных управляющих символов, позволяющих задавать изолированные по направлению фразы текста, т.е. появляется возможность вставлять символы, направление письма которых может отличаться от направления окружающего текста.

Установка

Как обычно, протестировать новую версию Perl можно с помощью perlbrew:

perlbrew install 5.19.5
perlbrew switch 5.19.5

Устанавливайте, тестируйте и делитесь впечатлениями!

Владимир Леттиев


Использование HTML::FormFu при работе с Catalyst | Содержание | Обзор CPAN за октябрь 2013 г.
Нас уже 1393. Больше подписчиков — лучше выпуски!

Комментарии к статье