LINUX.ORG.RU

Perl 5.34.0

 


1

3

С момента выхода Perl 5.32.0 прошло около десяти месяцев. Если исключить документацию, генерируемые автоматически файлы и инструментарий для формирования самого релиза, было изменено 150,000 строк в 1,300 .pm, .t, .c и .h-файлах.

Выход версии 5.34.0 был омрачён рядом склок, приведших к уходу Sawyer X из сообщества. Это последний релиз, выпущенный данным pumpking'ом.

Несколько слов в память KENTNL (Kent Fredric)

Кент скончался в феврале 2021 года. Он поддерживал 178 CPAN-модулей, участвовал в разработке Gentoo Linux и самого Perl. Я также благодарен ему за исчерпывающие ответы на глупые вопросы, которые я задавал на заре моей карьеры Perl-разработчика. Земля пухом.

Новая функциональность

  • Добавлена экспериментальная поддержка try/catch.

    use feature 'try';
     
     try {
             a_function();
     }
     catch ($e) {
             warn "An error occurred: $e";
     }
    

    Данную функциональность реализовал Paul «LeoNerd» Evans, который в последнее время частенько занимается доработкой интерпретатора. Свежее интервью с LeoNerd'ом можно прочитать здесь. Также есть серия интересных статей, призванных помочь желающим присоединиться к доработке Perl.
  • Нижняя граница диапазонного квантификатора теперь может быть опущена: qr/{,n}/.
  • Допускается наличие пробелов для заключённой в фигурные скобки части метасимволов: \x{ FFFC } или qr/a{ 5, 7 }/.
  • Добавлен префикс 0o для записи восьмеричных констант: 0o123_456.
  • В модуль feature добавлены две включённых по умолчанию настройки-ограничителя, которые вылились из ожесточённых дискуссий по поводу гипотетической 7‑й версии интерпретатора. Суть споров в предложении Sawyer X включить по умолчанию вещи, которые и так считаются стандартом в сообществе, но что неминуемо привело бы к необходимости переписывать написанные в плохом стиле скрипты.
    • bareword_filehandles

      no feature qw( bareword_filehandles );
      
      open( FP, "<", "./x" );
      
      # Bareword filehandle "FP" not allowed under 'no feature "bareword_filehandles"' at bareword.pl line 3.
      # Execution of bareword.pl aborted due to compilation errors.

      Разумеется, данная прагма не влияет на поведение следующих идентификаторов без разыменовывающего префикса (т.н. «пустых слов»): STDIN, STDOUT, STDERR, DATA, ARGV, ARGVOUT и _.
    • multidimensional

      no feature qw( multidimensional );
      
      my %h = ();
      
      $h{1,2};
      
      # Multidimensional hash lookup is disabled at multi.pl line 5, near "2}"
      # Execution of multi.pl aborted due to compilation errors.
      

  • Исправлена утечка памяти:

    use Devel::Leak;
    my $count = shift @ARGV;
    
    $string = "STRING 1";
    
    my $handle;
    Devel::Leak::NoteSV($handle);
    for (1 .. $count) {
            $x = test_leak($string, "string 1");
                $x = test_leak($string, "string 2");
    }     
    Devel::Leak::CheckSV($handle);
    exit;
    
    sub test_leak {
            local ($string, $match) = @_;
                $match =~ s/\s/\\s/g;  # This Leaks
                    return ($string =~ /$match/i);
    }  
    

  • Расширен набор сообщений об ошибках и предупреждений.

Изменения в документации

  • Новые разделы
    • perldocstyle — руководство по работе с документацией, идущей в комплекте с Perl.
    • perlgov — документ, описывающий новую модель управления разработкой Perl'а. В perlpolicy также было произведено заметное количество правок для отражения случившихся изменений в управлении проектом.
  • Правки существующей документации
    • perlapi, perlguts, perlxs и perlxstut теперь отдают предпочтение SvPVbyte вместо SvPV.
    • Упоминания Pumpking'а заменены на «Руководящий комитет».
    • Документация split() упрощена путём удаления join() из примеров.
    • perlapi — продолжается работа по улучшению уже изложенной в разделе информации и документированию упущенных элементов API.
    • perlcommunity — s{irc.freenode.org/#perl.tw}{chat.freenode.org/#perl.tw}

      Данное изменение уже неактуально, в апстрим версии freenode заменена на libera.
    • perlfunc:
      • caller() — добавлено упоминание факта, что данная функция игнорирует блоки try{}.
      • my() и state() — читатель явно предупреждается, что лексические переменные не должны переопределяться в том же блоке или выражении, где они объявлены.
      • localtime() — описание было улучшено и добавлено упоминание, что результат всегда возвращается на английском языке.
      • sleep() — более подробно объясняется, как данная функция ведёт себя с нулевым или отрицательным параметром.
      • msgsnd()
  • perlpacktut — исправлены имена переменных в примерах.
  • Также изменены разделы: perlgit, perlguts, perlop, perlsyn, perlunifaq.

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

★★★

Проверено: Satori ()

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

Степень использования и того, и другого в реальной жизни сама за себя говорит.

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

Статистику тоже собирают заинтересованные. По этой причине в текущем опросе многие высказались против "маргинальщины" в доступных пунктах, ведь если нет пункта *BSD, значит ими никто не пользуется!

Так что всё это попытка выдать желаемое за действительное.

Следующий!

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

Ты же о попсе говоришь!

Да нет, о работе. Для питона понаписано масса всяческих батареек, причём в отличие от perl они довольно просты и заводятся без утомительного чтения документации, и ползания по perlmonks. Если имярек программист и постоянно использует perl, то эта возня окупается, потому что что нужна в работе, а если нет, то с питоном проще.

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

Модуль написать на питоне вообще думать не надо. На Perl далеко не так очевидно.

Ну и разумеется у питона всё нормально с кирилицей, у перла как бы тоже, но на деле как у vim. Вроде бы да, а вроде бы и нет.

А если вспомнить, что нынче под neovim, sublime, vscode, libreoffice, чего там ещё всякие макросы можно ваять именно на питоне, то ответ на вопрос о нужности perl, если ты на нём не пишешь за деньги постоянно и много, становится совершенно очевидным.

Perl не нужен, увы.

PS ну и вишенкой на торте. Питон учит студентота. Как в моей молодости фортран 4. А perl в вузах не преподают.

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

Да нет, о работе.

Это еще хуже)) Т. к.

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

тоже кое-что говорит о тебе — если понимаешь Perl, то это просто чтение документации, типа как мануал в консольке глянуть.

anonymous ()

Уважаемые перловики, отношусь с огромным уважением к вашим наработкам в CPAN, но синтаксис Perl для меня слишком сложен, поэтому я пользуюсь Си подобными ЯП: C#, JavaScript и т.п.

На Перле люблю пописывать однострочники Just for Fun.

Очень хотелось бы задействовать ваш Perl из DotNet языков или хотя бы из JS/TS, PHP, Python и т.п.

Есть ли какой-то готовый бридж?

Почему для почти всех языков есть:

https://libraries.io/nuget/pythonnet_netstandard_py39_linux

https://libraries.io/nuget/JCOBridge

https://github.com/Taritsyn/JavaScriptEngineSwitcher

https://www.nuget.org/packages/Peachpie.Runtime/

А для Перла не получается найти ни для DotNet, ни для JS, ни для чего :( Можно конечно сделать через out of process RPC, но хотелось бы все таки in process.

А может быть можно как-то изъ**ться и вызвать perl script из перлового регакса ?! :)

Есть вот такая штуковина для заюза PCRE:

https://www.nuget.org/packages/PCRE.NET/

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

Perl можно встроить в Сишные программы, а Сишные программы можно встроить куда угодно: https://perldoc.perl.org/perlembed

Но может быть есть какие-то более элегантные решения. Я не в курсе.

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

Если мне понадобится низкоквалифицированный обезьяний труд, я буду иметь тебя в виду.

Давали мне как-то на проект такого одного - типа тебя. Контора была демократичная - на чем хочешь, на том и работаешь. Нарезали ему задачу, выдали машину и оставили подготовить себе окружение и приступать к выполнению задачи. Если что - обращайся, поможем.

День проходит, второй - сидит человек, чего-то в консоле кряхтит - работает думаем мы. В конце недели спрашиваем - как дела, что с задачей? Он - сейчас, вот вот порты дособираю и сразу же приступлю!

p.s. Против FreeBSD ничего не имею - в свое время гонял на нем MPD для раздачи PPP в одном маленьком провайдере. Linux тогда был меньше пригоден для этого. И Perl в то время во всю импользовали для автоматизации… Эх!

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

А может быть, нет нормальных интеропов в Perl из-за того, что он плевать хотел на всеобщее облобирование вокруг?

Поэтому его и вычеркнули из списка «кошерных» языков программирования?

Толи дело LLVM и другие *VM? Последние версии которых не так то просто от бутстрапить начиная с асма или tiny сишки в том же GUIX.

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

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

https://stackoverflow.com/questions/274840/how-can-i-call-perl-from-java

Насолил им webgui.org когда-то лет 6 назад вероятно :)

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

одного - типа тебя

Ага, ты ещё скажи что все бздуны одинаковые.

вот вот порты дособираю

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

Только один раз мне пришлось на одной машине переключиться на FreeBSD STABLE (тогда ещё восьмая) и собрать кучу софта из портов, потому что задача так стояла, а перенастраивать билдферму и собирать на ней не имело никакого смысла — задача была единоразовая.

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

День проходит, второй - сидит человек, чего-то в консоле кряхтит - работает думаем мы. В конце недели спрашиваем - как дела, что с задачей? Он - сейчас, вот вот порты дособираю и сразу же приступлю!

Значит так оценили работника, что подсунули ему бедному самую тормозную тачку в конторе. Рабочее окружение из портов и система из исходников, если здраво подходить к делу, собирается и настраивается в течение 8-10 часов на средней по производительности машине. А уж если пользоваться бинарниками, то и того быстрее.

iZEN ★★★★★ ()
Ответ на: комментарий от x-signal

Да, Ларри просто мировой мужик! Вот показательная строка его биографии:

As I already mentioned Larry Wall is one of the most interesting figures on the open source/free software arena. The only one with the implicit vow of poverty, kind of open source software monk (or, more correctly, a priest). Unlike most other major figures of open source movement he never tried to commercialize his creation. That actually did not served him all too well when he was diagnosed with cancer. Wall's Christian values also has influenced some of the terminology of Perl function bless as well as organization of Perl 6 design documents with categories such as apocalypse and exegesis. In comparison with Linux, Perl itself was much less about money and never produced shady startups with greedy executives like Red Hat and VA Linux.

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

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

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

Бандиты самые настоящие, которых очень тяжело поймать за руку.

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

Значит так оценили работника, что подсунули ему бедному самую тормозную тачку в конторе

А если бы дебилу пришло в голову майнить биткойны, вместо решения непосредственной задачи, для которой мощностей его конпуктера было достаточно, то ты бы сказал, что изверги специально так сделали? Зачем оправдывать конченного идиота?

anonymous ()