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)

Ответ на: комментарий от router

А что читать, и так всё ясно. Говноязык созданный специально что бы писать нечитаемый код. Для этой цели в нём есть всё что только можно представить. Например, несколько режимов работы которые влияют на семантику кода это полный маразм. И они всё больше и больше усложняют этого монструозного динозаврика прикручивая к нему новые костыли с каждым релизом и пытаясь сохранить backward-compatibility.

Можете считать меня неосилятором, да только осиливать этого монстра нет смысла щас вообще. Возможно когда то он и был удобен по сравнению с писанием bash скриптов, но сейчас такие скрипты можно писать на ruby - прекрасный язык который имеет все те же фичи (регулярные выражения и т.д.) и при этом адекватный синтаксис, продуманный OOP, никаких костылей, код читается почти интуитивно даже если знаешь язык поверхностно. Ну или на python - кому что больше нравится.

tux2015
()

А ООП нативное там прикрутили ? Или все через функциональные костыли как обычно ?

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

не - perl красив не то что куций python.



Ну если вы считаете костыли красивыми тогда конечно.

Python действительно не особо, ruby мне больше нравится. Вот ruby действительно красив и изящен потому что продуман от начала до конца.

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

скрипты можно писать на ruby - прекрасный язык который имеет все те же фичи (регулярные выражения и т.д.) и при этом адекватный синтаксис, продуманный OOP, никаких костылей, код читается почти интуитивно даже если знаешь язык поверхностно.

без CPAN'a это фсио не нужно :)

Ну или на python - кому что больше нравится.

вариант. широкий путь и узкий путь. Раби - на двух стульях усидеть пытается.

Deleted
()

В компании, где я работаю, Perl — основной язык разработки. Около 80% всего на нем написано.

Пишу на нем уже 3 года — полет отличный.

Ругатели зря ругают этот прекрасный язык. В нем есть много чего очень вкусного.

И да. За несколько десятилетий другие языки появлялись и умирали, а Perl как держал свои (хоть и маленькие) позиции, так и продолжает =)

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

пИсать надо аккуратнее!

И это тоже. Культура начинается с каждого из нас.

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

ruby действительно красив и изящен потому что продуман от начала до конца.

Да, ruby крут. Но после perl всё равно чувствуешь лёгкую тесноту, когда пишешь на ruby.

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


без CPAN'a это фсио не нужно :)



RubyGems - аналог для ruby. Приведите пример что такое есть в cpan что нету там.


вариант. широкий путь и узкий путь. Раби - на двух стульях усидеть пытается.



Не совсем понял. Ruby синтаксис позволяет писать кратко (в отличии от того же python) но при этом код читабелен. В отличии от пёрла.

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


Да, ruby крут. Но после perl всё равно чувствуешь лёгкую тесноту, когда пишешь на ruby.



Ну приведите пример. В отличии от python на руби тоже можно писать однострочники, язык не требует расписывать каждое действие до мельчайших деталей. В то же время эти однострочники читабельны в отличии от перловых.

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


В компании, где я работаю, Perl — основной язык разработки. Около 80% всего на нем написано.



Сочуствую.


Ругатели зря ругают этот прекрасный язык. В нем есть много чего очень вкусного.



Чего именно, можно конкретно чего нет в ruby?


И да. За несколько десятилетий другие языки появлялись и умирали, а Perl как держал свои (хоть и маленькие) позиции, так и продолжает =)



Вот именно что весьма маленькие. Пишут на нём узкий круг лиц которые когда то были вынуждены начать им пользоваться (отсутвие альтернативы в древние времена, используется в компании, и т.д.) и привыкли.

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

RubyGems - аналог для ruby.

Displaying gems 1 - 30 of 4817 in total

vs

The Comprehensive Perl Archive Network (CPAN) currently has 133,917 Perl modules in 29,651 distributions, written by 11,460 authors, mirrored on 266 servers.

Приведите пример что такое есть в cpan что нету там.

я не знаю rubygems. Видимо не хватает остальных 130 тысяч модулей на все случаи жизни.

Ruby синтаксис позволяет писать кратко (в отличии от того же python) но при этом код читабелен. В отличии от пёрла.

на двух стульях, ага.

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

Вы поверхностно судите. Вопрос не в количестве а качестве. Можно написать тыщи библиотек делающих одну и ту же задачу, каждая по своему, при чём большинство из них делающих её кое как. Собственно это в стиле пёрла: TIMTOWTDI (there's more than one way to do it - фича которая доводит нечитабельность кода до совершенства). А вы можете конкретно назвать библиотеку из CPAN которой вам не хватает в ruby?

Ну а версию можете брать любую, как и в пёрле. В перле же тоже не все перешли на 5.20.

tux2015
()

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

Что за бред? Давно уже было Sub::Signatures, Method::Signatures и т.д. Ну теперь запилили в язык, непонятно только, а нахрена?

no-such-file ★★★★★
()
Ответ на: комментарий от Deleted

на двух стульях, ага.

На одном руби он рейлз, на другом удав с пробелами.

erebtonge
()

The following modules will be removed from the core distribution in a future release...

CGI and its associated CGI:: packages

Ну все, конец перлу...

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

Коре дистрибушн? Да и хрен с ним. Из сипана поставил и все дела.

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

А вы можете конкретно назвать библиотеку из CPAN которой вам не хватает в ruby?

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

Ну а версию можете брать любую, как и в пёрле. В перле же тоже не все перешли на 5.20.

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

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


Ты извини, конечно, но надо быть дэбилом, чтобы не осилить перл. На нём просто писать.


Может и просто, но точно противно.

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


Перестал писать как только столкнулся с тем, что для работы с utf8 надо устанавливать дополнительные либы.



В 1.9 ничего не надо, это было в 1.8.


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



И в итоге язык разросся до абсурдных размеров и со всех сторон поддерживается на подгнивающих костылях. Нахрен такая совместимость, всё равно любое востребованное ПО регулярно обновляется.

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

В 1.9 ничего не надо, это было в 1.8.

и в 1.9, и в 2.0. 'жопа с утф8'.upcase

И в итоге язык разросся до абсурдных размеров и со всех сторон поддерживается на подгнивающих костылях.

какая жесть: костыли гниют а программы просто работают.

Нахрен такая совместимость, всё равно любое востребованное ПО регулярно обновляется.

востребованное для меня ПО я не собираюсь переписывать под новый интерпретатор только чтоб каждый раз код был «красивый» :)

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

%*)

foreach (keys $hashref->{'HASH2'}->%*) { 1; }
выглядит намного приятней, чем
foreach (keys %{$hashref->{'HASH2'}}) { 1; }

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

Ох, лол.

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

Displaying gems 1 - 30 of 4817 in total

Слышь, клоун, ты бы по буквам прошелся, прежде чем вбрасывать, (возможно), заметил бы, что цифры разные... http://modulecounts.com/ // зы. не любитель руби, ибо перл напоминает, но для командной строки - сойдет

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

Может и просто, но точно противно.

Противно писать на python, java, c#, php и С++ (иногда). Нормально перевариваются С++ и Vala, но Perl и C - лучшие, это несомненно.

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

хым. А чем тогда CGI заменить? Хотя бы для отправки хэдеров и парсинга параметров. Если хэдеры можно еще и так напечатать, то парсить параметры того же GET запроса вручную - мы так уходим обратно в 90-е годы.

У меня много есть CGI скриптов на перле. Мне что теперь их на пых портировать чтоле?

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

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

По поводу руби - когда можно будет рубьи скрипты запускать на вебсервере, а не городить колхоз делая из скрипта вебсервер, тогда будет какой-то разговор. А в нынешнем состоянии, когда ради полутора десятка рубьих скриптов надо открывать полтора десятка портов на сервере - сношал я такой язык аж отсюда. То же самое могу сказать и о NodeJS.

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

Человек, два чая анонимусу.

Питон - пробелы. Жаба и сишарп - ехал объект через объект. Пхп и плюсы терпимо. Перл - божественно.

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

Годно и нужно. Уже поставил через plenv.

Чем оно лучше/хуже чем perlbrew ? Лично я использую perlbrew в том числе и в тестовых скриптах для переключения «на лету окружения» когда нужно протестировать код под 5.10, 5.14, 5.16.

%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")

В отличии от параметров функции это нужный функционал.

ps: присоединяюсь: perl - лучший!

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

хым. А чем тогда CGI заменить? Хотя бы для отправки хэдеров и парсинга параметров. Если хэдеры можно еще и так напечатать, то парсить параметры того же GET запроса вручную - мы так уходим обратно в 90-е годы.

У меня много есть CGI скриптов на перле. Мне что теперь их на пых портировать чтоле?

Никогда не пользовался CPAN ? Всегда можно поставить через cpan-менеджеры. Но если у тебя Debian (или производный) дистрибутив то потом (когда 5.20 будет в дистре) ищи модуль CGI в репозитории примерно так: apt-get install libcgi-perl

На будущее: если вдруг ты не находишь нужный модуль в репозитории но есть в CPAN и хочется поставить используя пакетную систему Debian то сделай это из-под рута: cpan2deb CGI Эта команда скачает из CPAN модуль CGI.pm, соберет пакет libcgi-perl...deb в текущей директории. Да не переживай ты за CGI.pm, пойми что просто нельзя все 130+ тыс. модулей впихать в perl-core, надо актуализировать по времени.

anonymous
()

в курсе ли кто-нибудь?: они исправили баг из-за которого перестали компилироваться маны для OpenSSL?

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

питон не могу, так как к нему yum подвязан у меня.

а перл к много чему подвязан, так просто не удалишь)

поэтому и говорю мечтаю))

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


какая жесть: костыли гниют а программы просто работают.
востребованное для меня ПО я не собираюсь переписывать под новый интерпретатор только чтоб каждый раз код был «красивый» :)


Ой видел я скрипты подобных вам деятелей. Глючные полуобфусцированные ненадёжные поделки падающие в самый не подходящий момент.

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

когда ради полутора десятка рубьих скриптов надо открывать полтора десятка портов на сервере - сношал я такой язык аж отсюда


Вы что то путаете. Язык тут не при чём. К тому же embedded ruby можете использовать как PHP. Так же есть cgi.rb. А ваш cgi.pm глючное говно как сами же любители говноязыка писали выше.

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

Ой видел я скрипты подобных вам деятелей. Глючные полуобфусцированные ненадёжные поделки падающие в самый не подходящий момент.

представляешь, если еще такие скрипты переписывать под новую версию раби-интерпретатора? Потому в rubygems и модулей мало. Всё переписывают, а не пишут.

Deleted
()
Ответ на: $foo, $baz=10 от Bioreactor

Напейсать можно.
А прочитать, нельзя, однако...

Это смотря чем напишешь...

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

Я вообще спрашивал о том, есть ли более годная замена модулю CGI. Как поставить, я и так в курсе.

А ну тогда извини. Я подумал что ты забеспокоился о доступности модуля а не замене CGI. Лично мне вообще не ясен смысл замены модуля CGI на какой-то другой модуль реализующий данную технологию. Особенно с учетом того что сам модуль CGI активно разивается (версия 4.01 от 27 мая 2014г). Как вариант могу посоветовать познакомиться с модулем ModPerl::Registry (modperl+apache) с, вероятно, интересными для вас опциями SetHandler perl-script и PerlResponseHandler ModPerl::Registry. И другой вопрос, если вы решили отказаться от технологии CGI в своих будущих разработка (например в пользу PSGI), то тогда вам вероятно будет интересен фреймворк Mojolicious.

anonymous
()

Извиняюсь за оффтопик, но подскажите, пожалуйста, что за плагин используется на сайте для подсветки кода? Или это самописное? Спасибо!

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

А ваш cgi.pm глючное говно как сами же любители говноязыка писали выше.

Я все же вмешаюсь, хоть и не со мной разговор.

1) заявление, на мой взгляд, голословное, т.к. сколько я не работал с CGI.pm - ни разу ничего «глючного» не видел; все работало как и ожидалось

2) когда я в модулях нахожу недоработки, то я как правило разбираюсь в проблеме и шлю багрепорт с патчем майнтайнеру модуля; позиция «сидеть и ждать, и упрекать за то что мне не угодили» - это позиция деградированной личности которая неприемлима мной

3) быдло, фильтруй базар; противно читать твои сообщения - от тебя и твоих сообщении тянет туалетом

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

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

на ruby так вообще никто не пишет. кстати, как там, unicode наконец-то прикрутили или ещё «не до конца»?

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