[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Web - программирование / PERL /

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

Автор: annihilator

На днях вышел первый кандидат Perl-а на релиз — 5.10.0 RC1. А ведь прошло 5 лет с момента предыдущего релиза (5.8).

Так что же интересного нас ждет в 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

При написании этой статьи были использованы следующие материалы:
 




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / PERL /

CGI интерфейс
24-10-2009   

Большое количество World Wide Web приложений основано на использовании внешних программ, управляемых Web сервером... подробнее

Кол. просмотров: общее - 5699 сегодня - 0

Upload File
24-10-2009   
Кол. просмотров: общее - 4797 сегодня - 0

Программирование для Веб: Загрузка файлов на сервер и посылка e-mail с вложениями
24-10-2009   

Одним из популярнейших вопросов во всевозможных форумах является вопрос «Как загрузить файл на сервер?». А ведь на самом деле это не так сложно, как кажется на первый взгляд. И чтобы не было совсем легко – пусть скрипт, который приведен ниже еще и посылает этот файл по почте, в виде вложения... подробнее

Кол. просмотров: общее - 5219 сегодня - 0

Защита WWW-сценариев от несанкционированного копирования и модификации
24-10-2009   

В статье рассматривается один из основных подходов к генерации динамического контента в среде веб-приложений, а именно использование веб-сценариев и CGI, и применительно к ним, методы защиты исходных текстов от несанкционированного копирования и модификации... подробнее

Кол. просмотров: общее - 4835 сегодня - 0

Как защитить мою программу, чтобы никто не смог её прочитать?
20-10-2009   

Disclaimer: все приведённые примеры предназначены для демонстрации принципов, а вовсе не являются готовыми к использованию решениями... подробнее

Кол. просмотров: общее - 4929 сегодня - 0



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects