LINUX.ORG.RU

Perl 5.20

 ,


3

8

Несколько часов назад состоялся релиз новой мажорной версии языка программирования Perl. Разработка Perl 5.20.0 заняла примерно 12 месяцев с момента выпуска Perl 5.18.0 и содержит около 470 000 строк изменений в 2 900 файлах от 124 авторов.

В этой версии достаточно много новшеств:

  • Subroutine signatures
    То, чего многие так ждали, а другие возражали привычным «ненужно»
    sub foo($bar, $baz) {
      print "\$bar=$bar, \$baz=$baz"
    }
    
    Таким образом теперь можно определять параметры функции в скобках после её имени. Есть и возможность задать значение по умолчанию
    sub bar($foo, $baz=10) {
      print '$foo+$baz=', $foo+$baz
    }
    
    О других особенностях новой экспериментальной возможности можно прочитать в perldoc perlsub. Стоит отметить, что старый механизм получения параметров функции из @_ также остаётся в силе.
  • Новый синтаксис для получения среза ключей-значений/индексов-значений для хешей/массивов
    %hash{...} и %array[...] соответственно
    %h = (blonk => 2, foo => 3, squink => 5, bar => 8);
    %subset = %h{'foo', 'bar'}; # срез ключ-значения для хеша
    # %subset теперь (foo => 3, bar => 8)
    
    @a = "a".."z";
    @list = %a[3,4,6]; # срез индекс-значения для массива
    # @list теперь (3, "d", 4, "e", 6, "g")
    
  • Постфиксное разыменовывание
    К старому доброму разыменовыванию ссылок, навроде @$foo и %$bar, был добавлен вариант постфиксного разыменовывания: $foo->@* и $bar->%* соответственно. Синтаксис для других типов ссылок можно посмотреть в perldoc perlref
  • Механизм копирования при записи (copy-on-write) для строк
    Теперь при присвоении переменной значения другой строковой переменной не создаётся копии буфера вплоть до тех пор, пока значение одной из переменных не будет изменено. Это увеличивает скорость присвоения и снижает потребление памяти. Теперь не потребуется передавать в функцию строковую переменную по ссылке, чтобы увеличить производительность.

>>> Подробности

★★★

Проверено: Aceler ()
Последнее исправление: cetjs2 (всего исправлений: 2)
Ответ на: комментарий от dvrts

Оно живо?

Естественно. Что ему будет?!

ymn ★★★★★
()

Да на нем же теперь могут люди писать. Разве это не противоречит идеологии перла? А вообще - годно.

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Да на нем же теперь могут люди писать. Разве это не противоречит идеологии перла?

<sarcasm>Главное — чтобы читать не могли.</sarcasm>

Aceler ★★★★★
()

То, чего многие так ждали, а другие возражали привычным «ненужно»

Среди моих коллег и друзей много разногласий по этому поводу. Причем почти все они сидят на 5.10 и будут сидеть до конца карьеры перловика.

outtaspace ★★★
()

Таким образом теперь можно определять параметры функции



Охренеть, какое достижение! Шёл 2014 год!

tux2015
()

все время хочу его попробовать, но никак до дела не доходит. а теперь он теряет свою чернокнижную природу... хнык

uber_cat
()

Сигнатуры?

Сигнатуры функций в моем перле?

Да что с ними не так.

APM
()

Не нужно, закапывайте обратно.

stitchix
()
Ответ на: комментарий от burning_giraffes

CGI

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

CGI.pm нет, Perl больше не годится для WEB'а :)

outtaspace ★★★
()

An argument can be ignored by omitting the main part of the name from a parameter declaration, leaving just a bare $ sigil. For example,

sub foo ($first, $, $third) {
    return "first=$first, third=$third";
}

интересно зачем это может понадобиться... Как будто специально сделано для более удобного написания костылей.

TDrive ★★★★★
()
Ответ на: комментарий от uber_cat

современным корпорастам проще нанять php/python скриптовиков, в которых порог вхождения сильно разнится с перлом и не в его бизнес-применительную пользу

uber_cat
()

CoW для строк радует, а в остальном синтаксический сахар, как бы символизирует, что perl идеален добавить уже нечего

disarmer ★★★
()

Таким образом теперь можно определять параметры функции в скобках после её имени. Есть и возможность задать значение по умолчанию

Наконец-то. Лучше уж в загробном мире, чем совсем никогда.

mashina ★★★★★
()
sub foo ($thing, $ = 1) {
    print $thing;
}

sub foo ($thing, $=) {
    print $thing;
}

Узнаю старый добрый перл.)

TDrive ★★★★★
()
Ответ на: комментарий от kto_tama

Правильно сказать не «додумались», а «после долгих обсуждений решили добавить экспериментальную фичу». Причем коммьюнити долго обсуждало, было много вариантов решения, несколько раз откладывали внедрение.

outtaspace ★★★
()
Ответ на: комментарий от disarmer

Еще есть что добавлять - тот же MOP. Будет проще строить объектные системы. Сейчас на эту фичу есть спрос.

outtaspace ★★★
()
Ответ на: комментарий от disarmer

Именованные параметры это гибко, да. Сам пользуюсь. Только пользоваться придется осторожно, одна опечатка и много неприятностей с дебагом. А тут сахарок с валидацией, пусть будет, благо его включать надо явно.

outtaspace ★★★
()

Господи, какое убожество.

anonymous
()

Смотрю на примеры на перле и как-то смутно он напоминает мне Tcl. Не по функциональности, а так, по общему духу - написание каких-то скороруких фиговин в которых через два месяца можно мозг сломать.

void_ptr ★★★★
()

Subroutine signatures

Я мечтал об этом 10 лет назад! Лол.

А срезы хэшей, кстати, изящно запилили. Жаль, что это цветочки на могилку.

amix ★★★
()

GC у перла всё ещё упускает циклические ссылки?

hateyoufeel ★★★★★
()

Обажаю Perl. Выручает в быту, учёбе и на работе. Единственный язык во вселенной, про который можно сказать: «Сел и поехал!»

fero ★★★★
()
Ответ на: комментарий от vitalikp

Не вздумай! MBR emacs'а на Perl написан. Загружаться перестанет. А питон можешь удалять. Ничего кроме питона не отвалится.

fero ★★★★
()
Последнее исправление: fero (всего исправлений: 1)
Ответ на: комментарий от amix

Я мечтал об этом 10 лет назад

но зачем?

anonymous
()
Ответ на: комментарий от anonymous

cgi это не плохо/хорошо. Это вариант решения задачи.

Я критиковал CGI.pm за его «архитектуру» и чудовищную реализацию.

outtaspace ★★★
()
Ответ на: комментарий от fero

А питон можешь удалять. Ничего кроме питона не отвалится.

... кроме питона, apt, половины системных скриптов и утилит

router ★★★★★
()

Интересно, но всё это появится где-то в отдалённом будущем. Использовать всё равно буду ту версию, которая идёт в составе дистрибутива.

Т.е. новость скорее для мейнтейнеров и для энтузиастов

router ★★★★★
()

А это. RPerl-то выстрелил?

yoghurt ★★★★★
()

Оно ещё нужно для чего-то кроме парсинга?

MiniRoboDancer ★☆
()
Ответ на: комментарий от router

python3 из десктопного арча без последствий выпиливается, а вот на второй всякая прикладная шалупонь завязана, но кажется можно разрулить при большом желании

disarmer ★★★
()

$foo, $baz=10

Чукча приходит в издательство и представляет свою книгу. Редактор смотрит и видит вместо букв - неведомые закорючки. Он спрашивает:
— Чукча, ты читать вообще умеешь?
— Чукча, однако, не читатель. Чукча — писатель.

(C)

http://lurkmore.to/Чукча_не_читатель

Хороший язык.

Напейсать можно.

А прочитать, нельзя, однако...

Bioreactor ★★★★★
()
Последнее исправление: Bioreactor (всего исправлений: 2)
Ответ на: комментарий от Reset

Ага, многие продакшены до сих пор с 5.8 на 5.10 переехать не могут, а тут уже 5.20.

Что правда, то правда. Ънтерпрайз. Но как мне показалось мигрировать 5.10 -> 5.14 -> 5.16 было проще, чем 5.8 -> 5.10

KennyMinigun ★★★★★
()

Класс! Из всего вышеперечисленного больше всего хочу постфиксное разыменование:

foreach (keys $hashref->{'HASH2'}->%*) { 1; }

выглядит намного приятней, чем

foreach (keys %{$hashref->{'HASH2'}}) { 1; }

Правда, в ближайшие пару лет будет 'use 5.014', т.к. он в Debian Stable.

avallach2000
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.