Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Perl 5.10.0 релизнулся, танцуем и пляшем :) 
:(
    Опции темы
AriX
Дата 20.12.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: 1
Всего: 19



Perl 5.10.0 включает в себя некоторые элементы Perl 6, а также:
  • Новые возможности регуляных выражений 
  • Оптимизированную систему распределения памяти 
  • Переработанный механизм работы с UTF-8 строками 
  • Возврат к старой схеме обработки сигналов (до 5.8) 
  • В базовый состав включены модули: Math::BigInt::FastCalc, Compress::Zlib, IO::Zlib, Archive::Tar, Digest::SHA, ExtUtils::CBuilder, ExtUtils::ParseXS, Module::CoreList. 
  • Реализован оператор "// " ($a // $b эквивалентно defined $a ? $a : $b; $c //= $d эквивалентно $c = $d unless defined $c).

Подробности и ссылки тут:
http://dev.perl.org/perl5/news/2007/perl-5.10.0.html

Скачать


Что нового в Perl 5.10?
Следует заметить, что Perl 5.10 имеет обратную совместимость с предыдущими версиями в отличии от грядущего Perl 6.

По-умолчанию новые возможности версии 5.10 отключены. Активируются они специальной прагмой use feature, которая, кстати, имеет лексическую область видимости; или при помощи записи use 5.10.

Функция say
Аналог старого-доброго print, с тем лишь отличием, что say автоматически добавляет "\n" к выводимой строке:
Код
# привычный
print "$_\n" for @lines;
# становится лаконичнее
say for @lines;


Оператор //
Смесь || и defined, которая называется defined-or. Известно, что следующий код не совсем корректен, поскольку не учитываются «ложные» значения "" и 0:
Код
$var = $_[0] || 'default';

Корректная запись выглядит так:
Код
$var = $_[0];
$var = 'default' unless defined $var;
# или
$var = defined $_[0] ? $_[0] : 'default';

Благодаря новому оператору // предыдущих два примера переписываются вот таким образом:
Код
$var = $_[0];
$var //= 'default';
# или
$var = $_[0] // 'default';


Оператор ~~
Данный оператор реализует механизм умного сопоставления или smart matching. Он является коммутативным (то есть, $a ~~ $b эквивалентно $b ~~ $a) и его поведение зависит от типов передаваемых аргументов. Например:
Код
say "$x существует" if $x ~~ @array; # grep $_ == $b, @$a или grep $_ == $b, @$a
say "foobar в массиве" if @x ~~ /foobar/; # grep /$b/, @$a
say "$key существует" if $key ~~ %hash # exists $a->{$b}

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

given — аналог C-конструкции switch
Теперь эта конструкция built-in. Ее реализуют три новых слова: given, when и default. К тому же, она использует, описанное выше, умное сопоставление. Пример в студию!
Код
# вместо вот этого
if( $var ~~ undef ) { ... }
elsif( $var ~~ $var ) { ... }
elsif( $var ~~ @array ) { ... }
elsif( $var ~~ %hash ) { ... }
elsif( $var ~~ /regexp/ ) { ... }
else { ... }
# теперь пишем так
given( $var ) {
when( undef ) { ... }
when( $var ) { ... }
when( @array ) { ... }
when( %hash ) { ... }
when( /regexp/ ) { ... }
default { ... }
}

Игра «Отгадай число» (:
Код
use feature qw( switch say );
my @guessed;
my $num = int( rand 100 ) + 1;
while( my $guess = <STDIN> ) {
chomp $guess;
given( $guess ) {
when( /\D/ ) { say "Число, пожалуйста" }
when( @guessed ) { say "Это вы уже называли" }
when( $num ) { say "В яблочко!"; last }
when( $_ < $num ) { say "Маловато"; continue }
when( $_ > $num ) { say "Многовато"; continue }
push @guessed, $_;
}
}


Регулярные выражения
  • Буферам захвата теперь можно давать имена. Для этого используем синтаксис 
    Код
    (?<NAME>...)
    . Существует возможность обращаться к именованным буферам в теле самого выражения — 
    Код
    \k<NAME>
    . Хеш %+ используется для доступа к содержимому захваченных буферов. Существует похожий хеш %-, отличие которого состоит в том, что он хранит не само значение, а ссылку на массив значений всех захваченных буферов с одинаковыми именами.
    Код
    # name=value
    $str =~ /(?<name>\w+)=(?<value>\w+)/;
    say "The value of $_ is $+{$_}" foreach keys %+;

  • Добавлены собственнические квантификаторы (possessive quantifiers). Такие квантификаторы сопоставляют максимально-длинную подстроку и никогда ее не отпускают, то есть машина регулярных выражений не пытается сопоставить более короткую подстроку. Синтаксис схожий с «не жадными» квантификаторами, только вместо знака «?» используется «+». То есть: ?+, *+, ++, {min,max}+.

state-переменные
C-аналог модификатора static. Переменные объявленные со словом state имеют лексическую область видимости, но сохраняют свое значение постоянно.
Код
sub counter {
state $i = 0;
return $i++;
}


Filetest -X операторы стали стековыми
Теперь запись
Код
-x $file && -w _ && -f _

сокращаем до
Код
-f -w -x $file


И многое другое…
Рассмотреть здесь полностью все изменения не представляется возможным. Но если вы заинтересовались, то список новшеств можно прочитать в файле perl5100delta.pod

При написании этой статьи были использованы следующие материалы:// Взято с http://www.opennet.ru/opennews/art.shtml?num=13340 и http://habrahabr.ru/blog/perl/31053.html

Это сообщение отредактировал(а) AriX - 20.12.2007, 15:14
PM MAIL   Вверх
amg
Дата 20.12.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(AriX @  20.12.2007,  15:07 Найти цитируемый пост)
Существует похожий хеш %-, отличие которого состоит в том, что он хранит не само значение, а ссылку на массив значений всех захваченных буферов с одинаковыми именами.
Ага, что-то вроде PHP-шной preg_match_all. Это хорошо.

PM MAIL   Вверх
ZeeLax
Дата 20.12.2007, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 4388
Регистрация: 20.8.2006
Где: Алма-Ата

Репутация: нет
Всего: 88



 smile 


--------------------
Utility is when you have one telephone, luxury is when you have two, opulence is when you have three — and paradise is when you have none.
— Doug Larson
PM MAIL WWW ICQ Skype Jabber   Вверх
nitr
Дата 3.1.2008, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



В догонку:
уже есть ActivePerl 5.10



--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0472 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.