LINUX.ORG.RU

Perl 5.16

 ,


1

1

Вечером 20 мая, спустя год после публикации версии 5.14, состоялся релиз Perl версии 5.16.
Из изменений можно отметить следующие:

  • Поддерживаемая версия unicode обновлена до 6.1.
  • use VERSION теперь переводит интерпретатор в режим указанной версии. Например, указав use v5.14 в версии 5.16 мы получим поведение perl 5.14, а все features из других версий будут отключены.
  • Новое ключевое слово __SUB__, с помощью которого можно получить ссылку на текущую подпрограмму в области видимости самой подпрограммы. Теперь написание однострочников стало еще проще:
    # вычислим факториал 10 в одну строку
    my $fact = sub { $_[0]>0 ? $_[0] * __SUB__->($_[0]-1) : 1 }->(10)
    
  • Новая функция fc, производящая unicode casefolding над переданной строкой. Если ранее для сравнения не ASCII строк в разном регистре вы применяли lc() или uc(), то вы делали это неверно. Например слово «Reichwaldstraße» в верхнем регистре записывается, как REICHWALDSTRASSE. Что после перевода в нижний регистр обоих вариантов приведет к сравнению «reichwaldstraße» и «reichwaldstrasse». В итоге сравнение закончится неудачей. Именно эту проблему решает функция fc().

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

★★★

Проверено: tazhate ()
Последнее исправление: Silent (всего исправлений: 2)
Ответ на: комментарий от Olegymous

Но «SS» нельзя свернуть в «ß» без знания о языке. А в некоторых случаях, емнип, это и в немецком сделать нельзя.

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

А вообще, я, например, стараюсь использовать поменьше всяких особых символов за пределами стандартной латиницы/кириллицы.

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

Нужно компилировать perl 5.16 и проверять ;)

Olegymous ★★★
() автор топика

Зачем они это делают? Ведь написанное не запустится на старых системах!

sv75 ★★★★★
()
# вычислим факториал 10 в одну строку
my $fact = sub { $_[0]>0 ? $_[0] * __SUB__->($_[0]-1) : 1 }->(10)

Какой прекрасный язык.

ugoday ★★★★★
()

fc выглядит костылём. Неприятно :(
__SUB__ - шикарно!

# День стал чуточку лучше!

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

А мне не нравится в C-подобных языках отсутствие обычных Begin-End, вместо которых какие-то уродливые скобки, которые, к тому же, очень легко перепутать с обычными.

Весьма надуманная проблема:

#include <stdio.h>
#define begin {
#define end }

int main() begin
        printf("Hello world!\n");
        return 0;
end
:)

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

рикевестирую сахарок для генерации абстрактных методов:

__PACKAGE__->requires( qw( abstract_method ) );

вызов $obj->abstract_method() приводит к исключению «define 'abstract_method' in implementation»

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

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

4.2ишь, уважаемый. То, что на перле можно писать нечитаемый код, не значит, что его нужно писать и все это делают. На сях тоже можно наворотить тот еще ад, но ты же не предлагаешь на хаскелле ядро переписывать?

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

Модуль интересный, но его почему то нет в репозитории убунты. С крана ставить не люблю. При обновлении такие модули иногда отваливаются.

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

Но «SS» нельзя свернуть в «ß» без знания о языке

все правильно нельзя, это разные буквы, ß есть только маленькая и изночально не правильно заменять ее на SS

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

Абстрактные методы и интерфейсы планируются. Надо только придумать их красиво и выделить время.

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

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

А с абстрактными методами практически готовая идея. Реализация и тесты очень простыми получились, а профита (в моих проектах) достаточно много.

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

Дебиановцам надо писать. Убунта ведь оттуда эти пакеты берет.

Так это вы автор этого модуля? Спасибо вам. Действительно нужный модуль до выхода перл 6.

akinator ★★
()

Вычислим факториал 10 в одну строку:

my $fact = sub { $_[0]>0 ? $_[0] * __SUB__->($_[0]-1) : 1 }->(10)

Кто-нибудь рискнул запустить этот однострочник на Perl?

Xintrea ★★★★★
()

Новое ключевое слово __SUB__, с помощью которого можно получить ссылку на текущую подпрограмму в области видимости самой подпрограммы

Рекурсивные анонимные функции стали еще проще?

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

скажу так, если придерживаться на все 100% немецкой граматики (новой, где ß оставили только после длинных гласных) - то в немецком нет слов «reichwaldstrasse» и «REICHWALDSTRASSE» тоже нет... в слове Straße «а» длинный и за ним _должен_ быть ß, а ß есть только маленький.

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

Нет, вообще вы правы, слова состоящие из заглавных букв — монстры с классической точки зрения.

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

Вы еще предложите из всех языков убрать все диакритические знаки.

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

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

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

Так это вы автор этого модуля? Спасибо вам. Действительно нужный модуль до выхода перл 6.

На здоровье! :)

Дебиановцам надо писать. Убунта ведь оттуда эти пакеты берет.

Через пару версий напишу.

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

А с абстрактными методами практически готовая идея.

Я представляю, что для этого нужно делать. Но нужно обдумать ещё синтаксис. Тесты простые? Нужно усложнять :) Всегда что-нибудь вылезет.

Но да - следуйщий шаг - абстрактные методы.

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

Какую еще реформу? Вместо ß можно писать ss.

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

Реформы для того и проводят, чтобы убирать отслужившее. Если вместо ß можно писать ss, то надо упразднить ß.

Немцы иногда поражают. Вроде привычные к порядку люди, а тут такой бардак развели...

И не говори. Варвары и вандалы.

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

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

Я думал, что он уже умер.

В процессе. Собственно, когда апологеты ничего не могут привести в поддержку, кроме «зато он везде есть» - все становится довольно прозрачно.

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

Ну вот ведь глюканы. А чего реформу не проведут? Это же дикость.

По-опыту работы с немцами - они грамматические ошибки в исходниках оформляют как отельный issue, причём на каждую ошибку отдельный. Я один раз после сдачи проекта на code revision чуть инфаркт не хапнул, когда в почту глянул.

iBliss
()

Гордое Nya/ Ларри велик.

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

А мне не нравится в C-подобных языках отсутствие обычных Begin-End, вместо которых какие-то уродливые скобки, которые, к тому же, очень легко перепутать с обычными.

И воопче! Что это за манера код в коментариях писать!!!!

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

кто-то им еще пользуеться? Я думал, что он уже умер.

Уже по пояс закопан. Осталось серебрянкой покрасить.

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

Если вместо ss можно писать ß, то надо упразднить ss.

FIX

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

Какой прекрасный язык.

тут все просто и понятно для любого, кто прочитал хотя бы по полстранички perldoc perlvar и perldoc perlfunc

На самом деле, Perl предельно прост и понятен. Эксплицитное разделение на $, @, % и & - это божественно, а переменная по-умолчанию $_ - это вообще предел мечтаний.

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

Для того чтобы писать и править рабочие программы на Перле нужно держать в уме огромное количество правил и исключений. Будучи знакомым с синтаксисом Си, можно править программы на C++, С#, Java, Lua, не изучая основы этих языков, но невозможно редактировать программы на Perl не зная поведение спец-символов, которыми обильно унавожена любая программа на Перл, в определённом контексте.

Nebuchadnezzar ★★★★
()

пхпкапец

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

То, что на перле можно писать нечитаемый код, не значит, что его нужно писать, но все это делают.

Поправлено.

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

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

разделение на $, @, % и & - это божественно,

Господа, среди нас дьяволопоклонники.

ugoday ★★★★★
()

Самый лучший ЯП стал еще лучше!

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

use English; Luke
как человек, который перлом зарабатывает на бутерброд с маслом, скажу, что язык вполне читаемый, если поставить себе такую цель. Спецсимволы (вроде разделения переменных по типам на $, @, %) этому только помогают. Вернуть служебным переменным удобоваримые имена можно через use English, однако никто как правило этого не делает. Порой, конечно, встречаются адовые конструкции, но свои особенности, в том числе непрятные, есть в любом языке

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

Типичный набор претензий. Отказались принять культуру разработки на Perl и пережили культурный шок.

Язык достаточно зрелый. Есть большое количество методической литературы для начинающих, и для тех кто принимает проекты на этом языке.

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

С ß ещё относительно просто — оно всегда регистронезависимо-эквивалентно ss. А вот обычная латинская I может быть эквивалентна i, а может и не быть — в тюркских языках есть пары I/ı и İ/i.

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