Perl 5.10.0: что нового?

До НГ (2008) обещают выпустить новую версию языка Perl: 5.10.0.

Что нового в Perl 5.10.0?

Все новое включается директивой

use future;

или можно так:

use feature qw(
say
switch
state
);

Что Perl 5.10.0 нам готовит:
- новые функции: say,given/when/default,switch,state
- новые операторы ~~ и //
- многочисленные нововведения в синтаксисе регулярок


Как было показано выше, чтобы использовать что-то из этого набора, надо явно указать на это компилятору.

Лично я просто счастлив введению оператора //, т.к. в моих задачах наиболее часто встречается определение “defined-or”, а вовсе не то, что делает оператор || со значением 0. :-)
Примеры:

use future;
my $m;
my $n = $m // “2″;
say $n;

Получаем результат 2.

use future;
my $m = 0;
my $n = $m // “2″;
say $n;

Получаем результат 0!!!!
Ну и как было раньше:

my $m = 0;
my $n = $m || “2″;
say $n;

Получаем результат 2.

Оператор ~~
Данный оператор реализует механизм умного сопоставления или smart matching. Он является коммутативным (то есть, $a ~~ $b эквивалентно $b ~~ $a) и его поведение зависит от типов передаваемых аргументов. Например:

say “$x существует” if $x ~~ @array;
say “foobar в массиве” if @x ~~ /foobar/;
say “$key существует” if $key ~~ %hash;

Другими словами, ~~ — это «все-в-одном». Такое себе контекстно-зависимое сокращение.
Полная таблица поведений оператора ~~.

Функция say - по сути тот же самый print, но с завершающим переносом строки \n.
Т.е. код

say “Меньше”;

эквивалентен коду

print “Меньше\n”;

Указание компилятору - use future ’say’;

Условный оператор swith реализован тремя функциями: given,when,default.
Синтаксис:

given ($foo) {
when (/^abc/) { $abc = 1; }
when (/^def/) { $def = 1; }
when (/^xyz/) { $xyz = 1; }
default { $nothing = 1; }
}

Во многих случаях выглядит гораздо лаконичнее стандартного if-then-else.
Указание компилятору - use future ’switch’;

Ввели так называемые “постоянные переменные”.
Не смейтесь, так и есть в официальной документации: “Persistent variables”. :-)

По сути можно было их и раньше сделать. Примеры кода:

use feature ’state’;
sub gimme_another {
state $x;
return ++$x;
}

Можно было раньше выполнить как:

{
my $x;
sub gimme_another {
return ++$x;
}
}

Т.е. по сути пример - это счетчик, значение которого нельзя изменить за пределами самой функции.
Указание компилятору: use feature ’state’;

Что еще хочется отметить? Понравилось что теперь файлтесты стали куммулятивными.
Т.е. вместо конструкции

-x $file && -w _ && -f _

можно теперь написать более логичный вариант

-f -w -x $file

к которому мы по сути больше привыкли, пользуясь командной строкой ОС.

Стало чуть удобнее работать с функциями chdir, chmod и chown. Они теперь поддерживают работу с файловыми дескрипторами так же, как и раньше работали с именами файлов. Т.е. теперь при работе с файлом достаточно только помнить его дескриптор, который мы однажды открыли.

Полезное:
Полный список нововведений в Perl 5.10 на английском языке.
Что нового в Perl 5.10 на самом языке Perl :-) Очень хорошо показаны нововведения в синтаксисе регулярных выражений.

Одна из самых первых презентаций из серии “Что нового в Perl 5.10.0?”

Comments

Написать комментарий.




XHTML: Можете использовать следующий код: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>