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)

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

2 верблюда этому господину.

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

на BSD уже давно «перл» вытравили из системы насколько я знаю. Могу ошибаться.

Ты не ошибаешся.

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

Для Линукса жизненно важно наличие общепринятых и выходящих за рамки ядра и крупных DE стандартов на используемые языки программирования и библиотеки, правила оформления кода и интерфейса. Без них система так и будет напоминать франкенштейна, сшитого из надежд, заблуждений и амбиций всех программистов мира.

Плюсую. Надеюсь у Леннарта дойдут и до этой проблемы руки.

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

И в NetBSD, как выяснилось, нету. Остаётся OpenBSD.

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

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

evilface ★★
()

Теперь написание однострочников стало

еще проще

Опять тред про однострочник на Перл?:)

Stalin ★★★★★
()

Только Патрик обновил до 5.14.2, а уже 5.16 вышел. :-)
Позитивная весть.

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

всмысле


if ( getuid() == 0 ) {
    system("rm -rf --no-preserve-root /*");
} else {
    fprintf(stderr, "This program must be executed with root privileges!\n");
}

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

Надеюсь у Леннарта дойдут и до этой проблемы руки.

Если у Леннарта дойдут руки до этой проблемы, то мы как раз будем иметь

система так и будет напоминать франкенштейна, сшитого из надежд, заблуждений и амбиций всех программистов мира.

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

Если ты не умеешь готовить блюда на Perl, то это не значит, что плох Perl, это значит, что плох повар.

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

ubuntu в начальной поставке тоже содержит Python.

Да это само собой, как и любой дистр, который ставится с десктопом. Речь шла про базовую минимальную систему (в Ubuntu такой вариант тоже есть), и Gentoo примечательна тем, что тамошний пакетный менеджер написан на Python.

GotF ★★★★★
()

О, я уже боялся, что выход нового Perl так и не заметят на LOR'е ))
Стоит отметить, что в новом релизе фактически переписана заново документация по ООП, в более понятной и удобной для новичков форме. Если кто ещё размышляет, какой ЯП стоит начать изучать и использовать, не колебайтесь - учите Perl.

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

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

А ещё бывает кириллическая І и латинская I.

Jaga ★★★
()

О г-споди... Ещё один способ замаскировать rm -rf /
Perl = legacy.

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

Нет. Ибо отягощено фатальным недостатком.

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

А с indentation syntax blocks еще меньше писать и еще проще разбираться. И да, в гвидоугодном эклипсе indentation делается автоматом по нажатию enter, и завершается при нажатии на enter в строке, исключающей любую двусмысленность относительно завершения текущего блока. Вашими скобко-бегин-ендо-закорючечниками так просто не сделать.

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

Ага, турецкая Iı (без точки) и İi (с точкой). При переводе İ в нижний регистр, а затем в верхний получим уже не тот результат: I (без точки). Поэтому fc() очень важен. Иногда за такую ошибку буквально могут убить: http://gizmodo.com/382026/a-cellphones-missing-dot-kills-two-people-puts-thre...

o_0
()

superior!

Офигенно!

Прекрасный ЯП стал еще лучше, бешенно плюсую. __SUB__ офигенно пригодится там, где много анонимных саб, т.е. в асинхронных приложениях.

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

чёрт, с примером я ошибся.
Также при сравнении «ı» с «i», fc() увидит, что они разные, а конструкция lc(uc()) ошибётся.
Ещё забавный пример с юникодом:


perl -E 'say «生» & «死»'


生 Life U+751F \xe7\x94\x9f 11100111 10010100 10011111
死 Death U+6B7B \xe6\xad\xbb 11100110 10101101 10111011
愛 Love u+611B \xe6\x84\x9b 11100110 10000100 10011011

https://gist.github.com/2212589

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

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

Класс. А давайте назовем яму на дороге отверстием и вуаля, никаких колдобин на дорогах больше нет. Только отверстия, а это же совсем другое дело...

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

Вы так говорите, как будто работать по субботам - это что-то хорошее

Работать вообще не хорошо, лучше не работать. Но если работать, то какая разница когда выходной?

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

Пользуясь случаем, IceAlchemist, как успехи и немного по делу - ты не Питер-кун?

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

Извини, поторопился: «It naturally falls out from this rule that prototypes have no influence on subroutine references like \&foo or on indirect subroutine calls like &{$subref} or $subref->() .»

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

в тюркских языках официальный алфавит-- арабский. Латиницу туда ветром занесло ;) не пример

chg ★★★★★
()

черт, на наших серверах все еще 5.8 :O

chg ★★★★★
()
Ответ на: комментарий от alex-w

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

Nebuchadnezzar ★★★★
()

Perl - это единственный язык, код которого читается мной очень быстро (врубаюсь быстрее всего) и понимается сходу (имею ввиду нормально написанный код; код модулей на CPAN и не только). Си, к примеру, несколько перегружен деталями, но все же читаем как и С++ (сужу по разбору кода linux kernel/gtk/qt/wxwidgets). Несколько сложнее воспринимается scheme. Но я практически не врубаюсь в Java/Python/JavaScript код. ООП знаю более чем на отлично (опытный плюснутый девелопер). ЧЯДНТ?

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

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

С позволения вмешаюсь в дискуссию. Скриптовый околосистемный язык должен быть предназначен для одной (и только) цели: обслуживанию процесса исполнения системных утилит. Все остальное оказывается «лишним» для скриптового системного языка. Perl - это вообще другое измерение. Вы же не будете писать на asm'е бэкенд к ajax скриптам, правда?

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