List of new CPAN distributions – Feb 2024

r/perl

Published by /u/perlancar on Friday 01 March 2024 00:02

List of new CPAN distributions – Feb 2024

Perlancar

Published by perlancar on Friday 01 March 2024 00:00

dist author abstract date
Acme-CPANModules-ArrayData PERLANCAR List of modules related to ArrayData 2024-02-05T00:05:46
Acme-CPANModules-FormattingDate PERLANCAR List of various methods to format dates 2024-02-18T14:01:27
Acme-CPANModules-HashData PERLANCAR List of modules related to HashData 2024-02-06T00:05:32
Acme-CPANModules-Import-CPANRatings-User-davidgaramond PERLANCAR List of modules mentioned by CPANRatings user davidgaramond 2024-02-28T00:05:24
Acme-CPANModules-InfoFromCPANTesters PERLANCAR List of distributions that gather information from CPANTesters 2024-02-18T14:03:11
Acme-CPANModules-InterestingTies PERLANCAR List of interesting uses of the tie() interface 2024-02-29T00:05:11
Acrux-DBI ABALAMA Database independent interface for Acrux applications 2024-02-05T18:44:46
Alien-Cowl ZMUGHAL Find or build Cowl 2024-02-15T03:24:53
Alien-Qhull DJERIUS Build and Install the Qhull library 2024-02-09T17:38:52
AnyEvent-Sway JOHNMERTZ communicate with the Sway window manager 2024-02-09T00:42:07
App-GnuCash-MembershipUtils PDURDEN A group of perl modules and scripts to help in using GnuCash for membership. 2024-02-27T02:41:31
App-ISBN-Check SKIM Tool for ISBN checking. 2024-02-25T18:59:34
App-MARC-Record-Stats SKIM Tool to work with MARC::Record::Stats on MARC dataset. 2024-02-21T11:20:06
App-MergeCal DAVECROSS 2024-02-02T17:37:26
App-Prove-Plugin-TestArgs SVW A prove plugin to configure test aliases and arguments 2024-02-07T12:49:02
App-cdbookmark PERLANCAR Change directory to one from the list 2024-02-03T00:05:45
App-grep-similar-text PERLANCAR Print lines similar to the specified text 2024-02-01T00:06:12
App-zen LITCHIE Zen is a markdown based literate programming tool 2024-02-05T05:48:06
Bencher-Scenarios-Log-Dispatch PERLANCAR Bencher scenarios related to Log::Dispatch modules 2024-02-04T00:05:28
Bencher-Scenarios-Log-Dispatch-FileRotate PERLANCAR Scenarios to benchmark Log::Dispatch::FileRotate 2024-02-11T00:05:41
Bundle-WATERKIP WATERKIP A mono repo for perl scripts and modules which WATERKIP likes 2024-02-27T23:00:33
Chess-ELO-FIDE NICEPERL Download and store FIDE ratings 2024-02-24T19:06:41
Common-Log-Parser RRWO Parse the common log format lines used by Apache 2024-02-09T15:12:27
Comparer PERLANCAR Reusable comparer subroutines 2024-02-08T00:11:13
Comparer-by_similarity PERLANCAR Compare similarity to a reference string 2024-02-23T02:06:32
Comparer-similarity PERLANCAR Compare similarity to a reference string 2024-02-24T00:06:09
DBIx-Class-FilterColumn-Encrypt LEONT Transparently encrypt columns in DBIx::Class 2024-02-03T15:22:04
Dancer2-Controllers RAWLEYFOW A tool to allow OO style route declaration in Dancer2 2024-02-14T22:00:57
Data-Login SKIM Data objects for login. 2024-02-05T22:13:16
Data-Sah-FilterBundle-Filename-Safe PERLANCAR Sah filters related to removing problematic characters from filename 2024-02-10T00:06:19
Data-Structure-Deserialize-Auto TYRRMINAL Deserializes data structures from perl, JSON, YAML, or TOML data, from strings or files 2024-02-22T18:13:45
Data-Text-Simple SKIM Data objects for text in language. 2024-02-29T17:29:50
Data-Transfigure TYRRMINAL performs rule-based data transfigurations of arbitrary structures 2024-02-19T20:39:03
Date-Holidays-CW WATERKIP Curacoa's official holidays 2024-02-08T07:49:12
Devel-Confess-Source-Patch-ExcludePackage PERLANCAR Exclude some packages from source trace 2024-02-25T00:05:42
Dist-Zilla-Plugin-GitHub-Offline LEONT Add a GitHub repo's info to META.{yml,json} 2024-02-06T19:19:02
File-Util-Rename PERLANCAR Utilities related to renaming files 2024-02-12T00:06:03
Games-Sudoku-Html SHE Visualize and play collections of standard 9×9 Sudoku in your browser. 2024-02-24T20:23:44
Games-Sudoku-Pdf SHE Produce pdf files from your digital Sudoku sources or collections. 2024-02-24T19:57:08
Locale-CLDR-Locales-Aa JGNI Locale::CLDR – Data Package ( Perl localization data for Afar ) 2024-02-25T13:32:59
Locale-CLDR-Locales-Ab JGNI Locale::CLDR – Data Package ( Perl localization data for Abkhazian ) 2024-02-25T13:34:25
Locale-CLDR-Locales-An JGNI Locale::CLDR – Data Package ( Perl localization data for Aragonese ) 2024-02-25T13:39:26
Locale-CLDR-Locales-Ann JGNI Locale::CLDR – Data Package ( Perl localization data for Obolo ) 2024-02-25T13:40:49
Locale-CLDR-Locales-Apc JGNI Locale::CLDR – Data Package ( ) 2024-02-25T13:42:12
Locale-CLDR-Locales-Arn JGNI Locale::CLDR – Data Package ( Perl localization data for Mapuche ) 2024-02-25T13:43:47
Locale-CLDR-Locales-Ba JGNI Locale::CLDR – Data Package ( Perl localization data for Bashkir ) 2024-02-25T13:49:23
Locale-CLDR-Locales-Bal JGNI Locale::CLDR – Data Package ( Perl localization data for Baluchi ) 2024-02-25T13:49:34
Locale-CLDR-Locales-Bew JGNI Locale::CLDR – Data Package ( Perl localization data for Betawi ) 2024-02-25T13:54:02
Locale-CLDR-Locales-Bgc JGNI Locale::CLDR – Data Package ( Perl localization data for Haryanvi ) 2024-02-25T13:56:59
Locale-CLDR-Locales-Bgn JGNI Locale::CLDR – Data Package ( Perl localization data for Western Balochi ) 2024-02-25T13:57:19
Locale-CLDR-Locales-Bho JGNI Locale::CLDR – Data Package ( Perl localization data for Bhojpuri ) 2024-02-25T13:58:45
Locale-CLDR-Locales-Blo JGNI Locale::CLDR – Data Package ( Perl localization data for Anii ) 2024-02-25T14:00:25
Locale-CLDR-Locales-Blt JGNI Locale::CLDR – Data Package ( Perl localization data for Tai Dam ) 2024-02-25T14:00:36
Locale-CLDR-Locales-Bss JGNI Locale::CLDR – Data Package ( Perl localization data for Akoose ) 2024-02-25T14:08:19
Locale-CLDR-Locales-Byn JGNI Locale::CLDR – Data Package ( Perl localization data for Blin ) 2024-02-25T14:08:31
Locale-CLDR-Locales-Cad JGNI Locale::CLDR – Data Package ( Perl localization data for Caddo ) 2024-02-25T14:11:41
Locale-CLDR-Locales-Cch JGNI Locale::CLDR – Data Package ( Perl localization data for Atsam ) 2024-02-25T14:11:52
Locale-CLDR-Locales-Cho JGNI Locale::CLDR – Data Package ( Perl localization data for Choctaw ) 2024-02-25T14:16:44
Locale-CLDR-Locales-Cic JGNI Locale::CLDR – Data Package ( Perl localization data for Chickasaw ) 2024-02-25T14:19:31
Locale-CLDR-Locales-Co JGNI Locale::CLDR – Data Package ( Perl localization data for Corsican ) 2024-02-25T14:21:02
Locale-CLDR-Locales-Csw JGNI Locale::CLDR – Data Package ( Perl localization data for Swampy Cree ) 2024-02-25T14:22:49
Locale-CLDR-Locales-Cv JGNI Locale::CLDR – Data Package ( Perl localization data for Chuvash ) 2024-02-25T14:25:39
Locale-CLDR-Locales-Dv JGNI Locale::CLDR – Data Package ( Perl localization data for Divehi ) 2024-02-25T14:35:09
Locale-CLDR-Locales-Frr JGNI Locale::CLDR – Data Package ( Perl localization data for Northern Frisian ) 2024-02-25T14:51:31
Locale-CLDR-Locales-Gaa JGNI Locale::CLDR – Data Package ( Perl localization data for Ga ) 2024-02-25T14:54:34
Locale-CLDR-Locales-Gez JGNI Locale::CLDR – Data Package ( Perl localization data for Geez ) 2024-02-25T14:57:36
Locale-CLDR-Locales-Gn JGNI Locale::CLDR – Data Package ( Perl localization data for Guarani ) 2024-02-25T14:59:14
Locale-CLDR-Locales-Hnj JGNI Locale::CLDR – Data Package ( Perl localization data for Hmong Njua ) 2024-02-25T15:09:00
Locale-CLDR-Locales-Ie JGNI Locale::CLDR – Data Package ( Perl localization data for Interlingue ) 2024-02-25T15:20:31
Locale-CLDR-Locales-Io JGNI Locale::CLDR – Data Package ( Perl localization data for Ido ) 2024-02-25T15:23:42
Locale-CLDR-Locales-Iu JGNI Locale::CLDR – Data Package ( Perl localization data for Inuktitut ) 2024-02-25T15:26:52
Locale-CLDR-Locales-Jbo JGNI Locale::CLDR – Data Package ( Perl localization data for Lojban ) 2024-02-25T15:28:43
Locale-CLDR-Locales-Kaj JGNI Locale::CLDR – Data Package ( Perl localization data for Jju ) 2024-02-25T15:34:54
Locale-CLDR-Locales-Kcg JGNI Locale::CLDR – Data Package ( Perl localization data for Tyap ) 2024-02-25T15:36:25
Locale-CLDR-Locales-Ken JGNI Locale::CLDR – Data Package ( Perl localization data for Kenyang ) 2024-02-25T15:39:38
Locale-CLDR-Locales-Kpe JGNI Locale::CLDR – Data Package ( Perl localization data for Kpelle ) 2024-02-25T15:51:57
Locale-CLDR-Locales-Kxv JGNI Locale::CLDR – Data Package ( Perl localization data for Kuvi ) 2024-02-25T15:59:25
Locale-CLDR-Locales-La JGNI Locale::CLDR – Data Package ( Perl localization data for Latin ) 2024-02-25T16:01:00
Locale-CLDR-Locales-Lij JGNI Locale::CLDR – Data Package ( Perl localization data for Ligurian ) 2024-02-25T16:05:34
Locale-CLDR-Locales-Lmo JGNI Locale::CLDR – Data Package ( Perl localization data for Lombard ) 2024-02-25T16:07:06
Locale-CLDR-Locales-Mdf JGNI Locale::CLDR – Data Package ( Perl localization data for Moksha ) 2024-02-25T16:18:24
Locale-CLDR-Locales-Mic JGNI Locale::CLDR – Data Package ( Perl localization data for Mi'kmaw ) 2024-02-25T16:25:46
Locale-CLDR-Locales-Moh JGNI Locale::CLDR – Data Package ( Perl localization data for Mohawk ) 2024-02-25T16:30:37
Locale-CLDR-Locales-Mus JGNI Locale::CLDR – Data Package ( Perl localization data for Muscogee ) 2024-02-25T16:35:33
Locale-CLDR-Locales-Myv JGNI Locale::CLDR – Data Package ( Perl localization data for Erzya ) 2024-02-25T16:38:20
Locale-CLDR-Locales-Nqo JGNI Locale::CLDR – Data Package ( Perl localization data for N’Ko ) 2024-02-25T16:49:31
Locale-CLDR-Locales-Nr JGNI Locale::CLDR – Data Package ( Perl localization data for South Ndebele ) 2024-02-25T16:49:40
Locale-CLDR-Locales-Nso JGNI Locale::CLDR – Data Package ( Perl localization data for Northern Sotho ) 2024-02-25T16:51:06
Locale-CLDR-Locales-Nv JGNI Locale::CLDR – Data Package ( Perl localization data for Navajo ) 2024-02-25T16:52:52
Locale-CLDR-Locales-Ny JGNI Locale::CLDR – Data Package ( Perl localization data for Nyanja ) 2024-02-25T16:54:29
Locale-CLDR-Locales-Oc JGNI Locale::CLDR – Data Package ( Perl localization data for Occitan ) 2024-02-25T16:56:13
Locale-CLDR-Locales-Osa JGNI Locale::CLDR – Data Package ( Perl localization data for Osage ) 2024-02-25T16:59:38
Locale-CLDR-Locales-Pap JGNI Locale::CLDR – Data Package ( Perl localization data for Papiamento ) 2024-02-25T17:02:20
Locale-CLDR-Locales-Pis JGNI Locale::CLDR – Data Package ( Perl localization data for Pijin ) 2024-02-25T17:04:08
Locale-CLDR-Locales-Quc JGNI Locale::CLDR – Data Package ( Perl localization data for Kʼicheʼ ) 2024-02-25T17:10:41
Locale-CLDR-Locales-Raj JGNI Locale::CLDR – Data Package ( Perl localization data for Rajasthani ) 2024-02-25T17:10:54
Locale-CLDR-Locales-Rhg JGNI Locale::CLDR – Data Package ( Perl localization data for Rohingya ) 2024-02-25T17:12:17
Locale-CLDR-Locales-Rif JGNI Locale::CLDR – Data Package ( Perl localization data for Riffian ) 2024-02-25T17:13:41
Locale-CLDR-Locales-Scn JGNI Locale::CLDR – Data Package ( Perl localization data for Sicilian ) 2024-02-25T17:27:35
Locale-CLDR-Locales-Sdh JGNI Locale::CLDR – Data Package ( Perl localization data for Southern Kurdish ) 2024-02-25T17:29:16
Locale-CLDR-Locales-Shn JGNI Locale::CLDR – Data Package ( Perl localization data for Shan ) 2024-02-25T17:36:55
Locale-CLDR-Locales-Sid JGNI Locale::CLDR – Data Package ( Perl localization data for Sidamo ) 2024-02-25T17:37:33
Locale-CLDR-Locales-Skr JGNI Locale::CLDR – Data Package ( ) 2024-02-25T17:40:13
Locale-CLDR-Locales-Sma JGNI Locale::CLDR – Data Package ( Perl localization data for Southern Sami ) 2024-02-25T17:41:45
Locale-CLDR-Locales-Smj JGNI Locale::CLDR – Data Package ( Perl localization data for Lule Sami ) 2024-02-25T17:43:11
Locale-CLDR-Locales-Sms JGNI Locale::CLDR – Data Package ( Perl localization data for Skolt Sami ) 2024-02-25T17:45:00
Locale-CLDR-Locales-Ss JGNI Locale::CLDR – Data Package ( Perl localization data for Swati ) 2024-02-25T17:49:56
Locale-CLDR-Locales-Ssy JGNI Locale::CLDR – Data Package ( Perl localization data for Saho ) 2024-02-25T17:51:22
Locale-CLDR-Locales-St JGNI Locale::CLDR – Data Package ( Perl localization data for Southern Sotho ) 2024-02-25T17:51:52
Locale-CLDR-Locales-Syr JGNI Locale::CLDR – Data Package ( Perl localization data for Syriac ) 2024-02-25T17:56:10
Locale-CLDR-Locales-Szl JGNI Locale::CLDR – Data Package ( Perl localization data for Silesian ) 2024-02-25T17:57:55
Locale-CLDR-Locales-Tig JGNI Locale::CLDR – Data Package ( Perl localization data for Tigre ) 2024-02-25T18:04:08
Locale-CLDR-Locales-Tn JGNI Locale::CLDR – Data Package ( Perl localization data for Tswana ) 2024-02-25T18:07:12
Locale-CLDR-Locales-Tok JGNI Locale::CLDR – Data Package ( Perl localization data for Toki Pona ) 2024-02-25T18:08:49
Locale-CLDR-Locales-Tpi JGNI Locale::CLDR – Data Package ( Perl localization data for Tok Pisin ) 2024-02-25T18:09:03
Locale-CLDR-Locales-Trv JGNI Locale::CLDR – Data Package ( Perl localization data for Taroko ) 2024-02-25T18:13:13
Locale-CLDR-Locales-Trw JGNI Locale::CLDR – Data Package ( Perl localization data for Torwali ) 2024-02-25T18:13:24
Locale-CLDR-Locales-Ts JGNI Locale::CLDR – Data Package ( Perl localization data for Tsonga ) 2024-02-25T18:15:02
Locale-CLDR-Locales-Tyv JGNI Locale::CLDR – Data Package ( Perl localization data for Tuvinian ) 2024-02-25T18:18:06
Locale-CLDR-Locales-Ve JGNI Locale::CLDR – Data Package ( Perl localization data for Venda ) 2024-02-25T18:24:31
Locale-CLDR-Locales-Vec JGNI Locale::CLDR – Data Package ( Perl localization data for Venetian ) 2024-02-25T18:25:52
Locale-CLDR-Locales-Vmw JGNI Locale::CLDR – Data Package ( Perl localization data for Makhuwa ) 2024-02-25T18:28:42
Locale-CLDR-Locales-Wa JGNI Locale::CLDR – Data Package ( Perl localization data for Walloon ) 2024-02-25T18:30:55
Locale-CLDR-Locales-Wal JGNI Locale::CLDR – Data Package ( Perl localization data for Wolaytta ) 2024-02-25T18:33:42
Locale-CLDR-Locales-Wbp JGNI Locale::CLDR – Data Package ( Perl localization data for Warlpiri ) 2024-02-25T18:33:50
Locale-CLDR-Locales-Xnr JGNI Locale::CLDR – Data Package ( Perl localization data for Kangri ) 2024-02-25T18:37:03
Locale-CLDR-Locales-Za JGNI Locale::CLDR – Data Package ( Perl localization data for Zhuang ) 2024-02-25T18:44:50
Microsoft-Teams-WebHook TYRRMINAL Microsoft Teams WebHook with AdaptiveCards for formatting notifications 2024-02-20T19:13:14
Mo-utils-IRI SKIM Mo utilities for IRI. 2024-02-29T21:11:02
Mo-utils-URI SKIM Mo utilities for URI. 2024-02-11T16:17:45
Mojolicious-Plugin-INIConfig-Extended HESCO Mojolicious Plugin to overload a Configuration 2024-02-13T02:33:46
Mojolicious-Plugin-WebComponent RES An effort to make creating and using custom web components easier 2024-02-29T16:06:39
Net-EANSearch JANW Perl module for EAN and ISBN lookup and validation using the API on https://www.ean-search.org 2024-02-13T15:30:27
PDL-Opt-GLPK SOMMREY PDL interface to the GNU Linear Programming Kit 2024-02-21T20:32:39
Perlgram-Bot AMIRCANDY 2024-02-26T10:23:19
Plack-App-ChangePassword SKIM Plack change password application. 2024-02-08T21:15:14
Pod-Weaver-Plugin-Sah-SchemaBundle PERLANCAR Plugin to use when building Sah::SchemaBundle::* distribution 2024-02-26T00:06:02
RDF-Cowl ZMUGHAL A lightweight API for working with OWL 2 ontologies 2024-02-15T03:37:41
SPVM-HTTP-Tiny KIMOTO HTTP Client 2024-02-23T08:53:30
Sah-Schemas-Comparer PERLANCAR Sah schemas related to Comparer 2024-02-16T00:06:37
Sah-Schemas-SortKey PERLANCAR Sah schemas related to SortKey 2024-02-18T14:01:38
Sort-BySimilarity PERLANCAR Sort by most similar to a reference string 2024-02-02T00:05:29
SortExample PERLANCAR Sort examples 2024-02-27T00:05:08
SortKey PERLANCAR Reusable sort key generators 2024-02-14T00:05:41
SortKey-Num-by_length PERLANCAR String length as sort key 2024-02-15T00:05:40
SortKey-Num-length PERLANCAR String length as sort key 2024-02-15T00:05:51
Sorter PERLANCAR Sorter 2024-02-07T00:11:23
Sorter-by_similarity PERLANCAR Sort by most similar to a reference string 2024-02-13T00:06:16
Tags-HTML-ChangePassword SKIM Tags helper for change password. 2024-02-07T20:04:02
Tie-Hash-HashData PERLANCAR Access HashData object as a tied hash 2024-02-09T00:05:25
Tk-AppWindow HANJE an application framework based on Tk 2024-02-28T15:29:57
WWW-Suffit-Plugin-ConfigAuth ABALAMA The Suffit plugin for authentication and authorization providing via configuration 2024-02-22T08:17:35
WWW-Suffit-Plugin-FileAuth ABALAMA The Suffit plugin for authentication and authorization by password file 2024-02-22T11:39:04
WWW-Suffit-Plugin-SuffitAuth ABALAMA The Suffit plugin for Suffit API authentication and authorization providing 2024-02-22T08:16:09
mojo-util-benchmark CRLCU A set of utilities for working with collections of data. 2024-02-07T13:49:03

Stats

Number of new CPAN distributions this period: 155

Number of authors releasing new CPAN distributions this period: 26

Authors by number of new CPAN distributions this period:

No Author Distributions
1 JGNI 88
2 PERLANCAR 27
3 SKIM 8
4 ABALAMA 4
5 TYRRMINAL 3
6 SHE 2
7 LEONT 2
8 ZMUGHAL 2
9 WATERKIP 2
10 LITCHIE 1
11 AMIRCANDY 1
12 HANJE 1
13 RAWLEYFOW 1
14 JOHNMERTZ 1
15 CRLCU 1
16 DJERIUS 1
17 JANW 1
18 SVW 1
19 PDURDEN 1
20 RES 1
21 HESCO 1
22 NICEPERL 1
23 SOMMREY 1
24 KIMOTO 1
25 RRWO 1
26 DAVECROSS 1

Are there jobs as Perl developer in 2024?

r/perl

Published by /u/oscar_96vasa on Thursday 29 February 2024 15:50

Hi all.

I'm currently working as a PHP Developer, and I want to learn something new, because I've been developing in PHP for 7 years.

My current tech leader is a super senior developer with around 25 years of experience developing software, and he said his main programming language is Perl, and he worked with it so many years and so many projects, also he said he could teach me Perl in an advanced way if I wanted to.

So i have this opportunity to learn Perl from a professional with a lot of experience.

The only thing stops me, is that I know that Perl jobs are not that common, at least not as PHP jobs.

But something that motivates me is learning a new technology and apply it.

I know there are a lot of JS and Python jobs, but I don't really like those languages, I would prefer Java or C#.

This is my situation, should I invest this time into learning Perl if I want to expand my market opportunities?

Greetings!

submitted by /u/oscar_96vasa
[link] [comments]

bump $DynaLoader::VERSION

Perl commits on GitHub

Published by tonycoz on Thursday 29 February 2024 03:03

bump $DynaLoader::VERSION
Create a new logical xor operator, spelled `^^`

Previously, the low-precedence `xor` operator did not have a
higher-precedence logical variant, as compared `or` vs `||` and
`and` vs `&&`. This PR adds such an operator syntax, completing the
set.

DynaLoader: dl_dyld.xs: don't undef bool

Perl commits on GitHub

Published by tonycoz on Wednesday 28 February 2024 23:38

DynaLoader: dl_dyld.xs: don't undef bool

I expect this was added when we added our own bool, and before
we used bool so liberally ourselves.  Now dl_dyld.xs fails to
compile, since MY_CXT_CLONE indirectly uses UNLIKELY() which
casts to bool.

Tested locally with:

  ./Configure -des -Dusedevel -Dusethreads -Ddlsrc=dl_dyld.xs

on a modern Darwin, which failed before this change and builds
after.

Based on work done by Sevan Janiyan in #21751.

Fixes #21751

`README.haiku`: Update dead link

Perl commits on GitHub

Published by rwp0 on Wednesday 28 February 2024 21:30

`README.haiku`: Update dead link

http://ports.haiku-files.org is NXDOMAIN

Perl is here:
https://github.com/haikuports/haikuports/blob/master/dev-lang/perl/perl-5.32.1.recipe

Modernise & simplify bytes.pm

Perl commits on GitHub

Published by JRaspass on Wednesday 28 February 2024 21:28

Modernise & simplify bytes.pm

Perl Weekly Challenge 258: Count Even Digits Numbers

blogs.perl.org

Published by laurent_r on Wednesday 28 February 2024 20:27

These are some answers to the Week 258, Task 1, of the Perl Weekly Challenge organized by Mohammad S. Anwar.

Spoiler Alert: This weekly challenge deadline is due in a few days from now (on March 3, 2024 at 23:59). This blog post provides some solutions to this challenge. Please don’t read on if you intend to complete the challenge on your own.

Task 1: Count Even Digits Number

You are given a array of positive integers, @ints.

Write a script to find out how many integers have even number of digits.

Example 1

Input: @ints = (10, 1, 111, 24, 1000)
Output: 3

There are 3 integers having even digits i.e. 10, 24 and 1000.

Example 2

Input: @ints = (111, 1, 11111)
Output: 0

Example 3

Input: @ints = (2, 8, 1024, 256)
Output: 1

Count Even Digits Number in Raku

We use the chars function to count the characters of each integer, grep with the % modulo oprator to filter the counts that are even, and finally the elemsmethod to count the integers satisfying the desired condition. Altogether, a nice little oner-liner.

sub count-even-digits-ints (@in) {
    (grep { .chars %% 2 }, @in).elems;
}

my @tests = <10 1 111 24 1000>, <111 1 11111>, <2 8 1024 256>;
for @tests -> @test {
    printf "%-20s => ", "@test[]";
    say count-even-digits-ints @test;
}

This program displays the following output:

$ raku ./count-even-digits.raku
10 1 111 24 1000     => 3
111 1 11111          => 0
2 8 1024 256         => 1

Count Even Digits Number in Perl

This is a port to Perl of the above Raku program, using scalar and length to replace elems and chars. Also a concise one-liner.

use strict;
use warnings;
use feature 'say';

sub count_even_digits_ints {
    scalar grep { ! (length($_) % 2) } @_;
}

my @tests = ( [<10 1 111 24 1000>], 
              [<111 1 11111>], [<2 8 1024 256>] );
for my $test (@tests) {
    printf "%-20s => ", "@$test";
    say count_even_digits_ints @$test;
}

This program displays the following output:

$ perl ./count-even-digits.pl
10 1 111 24 1000     => 3
111 1 11111          => 0
2 8 1024 256         => 1

Count Even Digits Number in Julia

Again, a port of the two previous programs to Julia. The only significant difference is that we need to explicitly convert integers to strings to be able to find their length (number of characters).

using Printf

function count_even_digits_ints(invals)
    evens = filter(x -> (mod(length(string(x)), 2 ) == 0), invals)
    return size(evens, 1)
end

tests = [ [100, 1, 111, 424, 1000],
          [111, 1, 11111], [2, 8, 1024, 256] ]

for test in tests
    @printf "%-25s => " "$test"
    println("$(count_even_digits_ints(test))")
end

This program displays the following output:

$ julia  count-even-digits.jl
[100, 1, 111, 424, 1000]  => 1
[111, 1, 11111]           => 0
[2, 8, 1024, 256]         => 1

Wrapping up

The next week Perl Weekly Challenge will start soon. If you want to participate in this challenge, please check https://perlweeklychallenge.org/ and make sure you answer the challenge before 23:59 BST (British summer time) on March 10, 2024. And, please, also spread the word about the Perl Weekly Challenge if you can.

Spring-Boot esq, Controllers with Perl Attributes and Dancer2

r/perl

Published by /u/ivan_linux on Monday 26 February 2024 20:05

CFP: Science Track Papers Needed at The Perl & Raku Conference

blogs.perl.org

Published by Brett Estrade on Monday 26 February 2024 15:29

CALL FOR PAPERS NOW OPEN!

  • Science Track at The Perl & Raku Conference
  • June 25 - 27, 2024 (talk dates)
  • Las Vegas, Nevada, USA

click here to submit your abstract

You may submit your Science Track abstracts here! Don't wait, do this today! Prior registration to the Perl Conference is not a condition for acceptance, however individuals with accepted papers and posters are expected to register for and attend the Conference in person*. You may register for the Perl & Raku Conference here. (Note: in the past, the Conference registration fee has been waived for speakers; it is expected that this will be the case again this year, but at this time there are no guarantees.)

  • let us know if this is impossible, exceptions may be considered in some extenuating circumstances

Deadlines:

  • Abstract submission deadline: April 05, 2024 (23:59:59 UTC)
  • Full paper deadline: May 15th, 2024 (23:59:59 UTC)

When preparing your abstract, please bear in mind that the Science Perl Editorial Review Subcommittee is comprised of community members with a very wide range of scientific backgrounds, and any of them may be assigned to review your abstract and subsequent papers. When describing the goals of your paper, as well as the tools and approaches you use, write your abstract in such a way that it is informative to people working in the same or related fields, and understandable to a scientifically literate lay reader.

For more info, contact:  science AT perlcommunity DOT org

Main conference site and registration links are at https://tprc.us/tprc-2024-las/.

N00b help installing a module

r/perl

Published by /u/dovi5988 on Monday 26 February 2024 15:18

Hi,

Can anyone help explain to me why this is failing? I am trying to install Env::C and it seems to me that it is failing because of a leak test. Am I reading that right?

[root@a34 ~]# cat /root/.cpanm/work/1708960597.71560/build.log cpanm (App::cpanminus) 1.7047 on perl 5.026003 built for x86_64-linux-thread-multi Work directory is /root/.cpanm/work/1708960597.71560 You have make /usr/bin/make You have LWP 6.34 You have /usr/bin/tar: tar (GNU tar) 1.30 Copyright (C) 2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by John Gilmore and Jay Fenlason. You have /usr/bin/unzip Searching Env::C () on cpanmetadb ... --> Working on Env::C Fetching http://www.cpan.org/authors/id/M/MS/MSCHOUT/Env-C-0.15.tar.gz -> OK Unpacking Env-C-0.15.tar.gz Entering Env-C-0.15 Checking configure dependencies from META.json Checking if you have ExtUtils::MakeMaker 6.58 ... Yes (7.34) Configuring Env-C-0.15 Running Makefile.PL Checking if your kit is complete... Looks good Generating a Unix-style Makefile Writing Makefile for Env::C Writing MYMETA.yml and MYMETA.json -> OK Checking dependencies from MYMETA.json ... Checking if you have warnings 0 ... Yes (1.37) Checking if you have DynaLoader 0 ... Yes (1.42) Checking if you have strict 0 ... Yes (1.11) Checking if you have Test::More 0.88 ... Yes (1.302135) Checking if you have ExtUtils::MakeMaker 0 ... Yes (7.34) Building and testing Env-C-0.15 cp lib/Env/C.pm blib/lib/Env/C.pm Running Mkbootstrap for C () chmod 644 "C.bs" "/usr/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- C.bs blib/arch/auto/Env/C/C.bs 644 "/usr/bin/perl" "/usr/share/perl5/vendor_perl/ExtUtils/xsubpp" -typemap '/usr/share/perl5/ExtUtils/typemap' C.xs > C.xsc Please specify prototyping behavior for C.xs (see perlxs manual) mv C.xsc C.c gcc -c -D_REENTRANT -D_GNU_SOURCE -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fwrapv -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -g -DVERSION=\"0.15\" -DXS_VERSION=\"0.15\" -fPIC "-I/usr/lib64/perl5/CORE" C.c rm -f blib/arch/auto/Env/C/C.so gcc -lpthread -shared -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -L/usr/local/lib -fstack-protector-strong C.o -o blib/arch/auto/Env/C/C.so \ -lperl \ chmod 755 blib/arch/auto/Env/C/C.so Manifying 1 pod document "/usr/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- C.bs blib/arch/auto/Env/C/C.bs 644 PERL_DL_NONLAZY=1 "/usr/bin/perl" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/author-pod-coverage.t .. skipped: these tests are for testing by the author t/author-pod-syntax.t .... skipped: these tests are for testing by the author t/author-signature.t ..... skipped: these tests are for testing by the author # Failed test 'setenv does not leak' # at t/leak.t line 31. # got: 63416 # expected: 63418 # Looks like you failed 1 test of 1. t/leak.t ................. Dubious, test returned 1 (wstat 256, 0x100) Failed 1/1 subtests t/smoke-multi.t .......... ok t/smoke.t ................ ok Test Summary Report ------------------- t/leak.t (Wstat: 256 Tests: 1 Failed: 1) Failed test: 1 Non-zero exit status: 1 Files=6, Tests=14, 0 wallclock secs ( 0.01 usr 0.01 sys + 0.30 cusr 0.01 csys = 0.33 CPU) Result: FAIL Failed 1/6 test programs. 1/14 subtests failed. make: *** [Makefile:1033: test_dynamic] Error 255 -> FAIL Installing Env::C failed. See /root/.cpanm/work/1708960597.71560/build.log for details. Retry with --force to force install it. [root@a34 ~]# 

submitted by /u/dovi5988
[link] [comments]

Announcing the Perl Toolchain Summit in 2024!

blogs.perl.org

Published by BooK on Monday 26 February 2024 09:00

After three years of not organising and one successful PTS in Lyon last year, we might have become a bit complacent and forgotten how taxing organizing an event is... After a very slow preparation, we are very pleased to announce the fourteenth edition of the Perl Toolchain Summit!

In 2024, we will be meeting in Lisbon, Portugal, from Wednesday April 25 to Sunday April 28. As has become customary, participants will stay at the hotel, and work in the meeting rooms dedicated for the event.

The first rounds of invitations have been sent. We plan on having about thirty participants. We are always looking for sponsors (ask for our sponsor prospectus!).

The organisation is being handled by a small distributed team of people experienced with this event. This year, we're even more distributed, as none of the main organizers lives in Portugal! We are:

  • Breno G. de Oliveira (GARU) is our remote host, and will handle local matters (venue and accommodation) from Rio de Janeiro, Brazil.
  • Philippe Bruhat (BOOK) will manage the invitations and sponsors from Lyon, France.
  • Laurent Boivin (ELBEHO) will be handling the money from Paris, France, both inwards (getting it from the sponsors) and outwards (covering expenses and refunding attendees).
  • Neil Bowers (NEILB) will be helping remotely with planning and logistics from Marlow, UK.

Started in 2008 by Salve Nilsen (SJN) as the Perl QA Hackathon in Oslo, the Perl Toolchain Summit is an annual event that brings together the key developers working on the Perl toolchain. Each year (except for 2020-2022), the event moves from country to country all over Europe, organised by local teams of volunteers. The surplus money from previous summits helps fund the next one.

The developers who maintain CPAN and associated tools and service are all volunteers, scattered across the globe. This event is the one time in the year when they can get together.

The summit provides dedicated time to work on the critical systems and tools, with all the right people in the same room. The attendees hammer out solutions to thorny problems and discuss new ideas to keep the toolchain moving forward.

Given the important nature of the attendees' work and their volunteer status, we try to pay for most expenses (travel, lodging, food, etc.) through sponsorship. If you're interested in helping sponsor the summit, please get in touch with Philippe Bruhat at book@cpan.org.

Raku for Beginners Part 2 - Bruce Gray - TPRC 2023

The Perl and Raku Conference YouTube channel

Published by The Perl and Raku Conference on Monday 26 February 2024 07:50

Perl Weekly #657 - Perl Toolchain Summit in 2024

dev.to #perl

Published by Gabor Szabo on Monday 26 February 2024 06:28

Originally published at Perl Weekly 657

Hi There!

As the newsletter goes out to more than 4,000 people I often get back vacation notifications. Most of them are in English, but there are a few that are in some other language. I assume the local language of where that person works. A few of them are both in English and in the local language. Usually a language that I don't fully understand. I can guess and I can use an automated translator, but it seems it would make sense for these messages to include an English version as well.

Apparently we missed the announcement of the Perl Toolchain Summit. In 2024 it will be in Lisbon, Portugal, from Wednesday April 25 to Sunday April 28. They are looking for sponsors.

Enjoy your week!

--
Your editor: Gabor Szabo.

Announcements

Announcing the Perl Toolchain Summit in 2024!

perl 5.39.8 released

Nominate heroes for the 2024 White Camel Awards

Articles

Convert Markdown to HTML

A small example by yours truly.

The present isn't evenly distributed either

Personally I think that removing CGI.pm from the standard Perl wasn't a good idea. IT went against the philosophy of backward compability without providing an alternative in the core. On the other hand having (yet another) place that tries to promote newer web-technologies is a good idea.

What makes YAPC::Japan unique

Worth a read for anyone who wants to organize Perl-related events.

How to use zlib (a C library) from Perl with SPVM

Discussion

Perl in 2024

As of 2024, what are the most innovative and practical applications of Perl in today's tech landscape?

Grants

Maintaining Perl 5 Core (Dave Mitchell): November - December 2023

Perl

This Week in PSC (137) | 2024-02-22

The Weekly Challenge

The Weekly Challenge by Mohammad Sajid Anwar will help you step out of your comfort-zone. We pick one champion at the end of the month from among all of the contributors during the month.

The Weekly Challenge - 258

Welcome to a new week with a couple of fun tasks "Count Even Digits Number" and "Sum of Values". If you are new to the weekly challenge then why not join us and have fun every week. For more information, please read the FAQ.

RECAP - The Weekly Challenge - 257

Enjoy a quick recap of last week's contributions by Team PWC dealing with the "Smaller than Current" and " Reduced Row Echelon" tasks in Perl and Raku. You will find plenty of solutions to keep you busy.

Currently Reduced

As always we got some cool features of map and grep in Raku. Thanks for sharing the knowledge.

Lesser, Inferior, Lower, Junior

Use of map and grep together can be lethal and produce compact solution. Keep it up great work.

Use of PDL always amazed me. Well done and keep it up.

Perl Weekly Challenge 257: Smaller than Current

Job can be done without any gimmicks. The end result is simple and easy to follow. Thanks for the contributions.

Perl Weekly Challenge 257: Reduced Row Echelon

I noticed the use of Inf in Raku. Checkout the details if you are Raku fan.

Post-Valentine Challenge

Raku is very good at creating one-liner for search and lookup job. You would be surprise to see the result. Well done.

Perl Weekly Challenge 257

Perl one-liner with the help of CPAN module. You should checkout this post if you are one-liner fan.

Smaller and reduced

Simply love the task analysis and going beyond the comfort zone. Thank you for the detailed post.

Smaller than Echelon

Blogging style is very handy if you are dealing with long solution. This week luck language was Scala and Raku. Highly recommended.

The current echelon

A simple comparison of Perl and Python approach. Good to see both on the same page.

Weekly collections

NICEPERL's lists

Great CPAN modules released last week;

You joined the Perl Weekly to get weekly e-mails about the Perl programming language and related topics.

Want to see more? See the archives of all the issues.

Not yet subscribed to the newsletter? Join us free of charge!

(C) Copyright Gabor Szabo
The articles are copyright the respective authors.

This Week in PSC (137) | 2024-02-22

blogs.perl.org

Published by Perl Steering Council on Monday 26 February 2024 03:27

Paul was away this week.

  • we talked about the hiccups that PAUSE seems to have been through
  • we discussed further changes to the use VERSION behaviour (warnings)
  • and we started going through the bug list to tag release blockers

Perl Weekly Challenge 257: Reduced Row Echelon

blogs.perl.org

Published by laurent_r on Sunday 25 February 2024 21:13

These are some answers to the Week 257, Task 2, of the Perl Weekly Challenge organized by Mohammad S. Anwar.

Warning: I wrote the program below and this blog post from an hospital bed in a heart intensive care unit. I think my mind is clear, but there may very well be a better way to solve the task. Also, I do not have the energy to port this Raku program to other languages, nor to provide lengthy explanations.

Task 2: Reduced Row Echelon

Given a matrix M, check whether the matrix is in reduced row echelon form.

A matrix must have the following properties to be in reduced row echelon form:

1. If a row does not consist entirely of zeros, then the first
   nonzero number in the row is a 1. We call this the leading 1.
2. If there are any rows that consist entirely of zeros, then
   they are grouped together at the bottom of the matrix.
3. In any two successive rows that do not consist entirely of zeros,
   the leading 1 in the lower row occurs farther to the right than
   the leading 1 in the higher row.
4. Each column that contains a leading 1 has zeros everywhere else
   in that column.

For example:

[
   [1,0,0,1],
   [0,1,0,2],
   [0,0,1,3]
]

The above matrix is in reduced row echelon form since the first nonzero number in each row is a 1, leading 1s in each successive row are farther to the right, and above and below each leading 1 there are only zeros.

*For more information check out this wikipedia article.

Example 1

Input: $M = [
              [1, 1, 0],
              [0, 1, 0],
              [0, 0, 0]
            ]
Output: 0

Example 2

Input: $M = [
              [0, 1,-2, 0, 1],
              [0, 0, 0, 1, 3],
              [0, 0, 0, 0, 0],
              [0, 0, 0, 0, 0]
            ]
Output: 1

Example 3

Input: $M = [
              [1, 0, 0, 4],
              [0, 1, 0, 7],
              [0, 0, 1,-1]
            ]
Output: 1

Example 4

Input: $M = [
              [0, 1,-2, 0, 1],
              [0, 0, 0, 0, 0],
              [0, 0, 0, 1, 3],
              [0, 0, 0, 0, 0]
            ]
Output: 0

Example 5

Input: $M = [
              [0, 1, 0],
              [1, 0, 0],
              [0, 0, 0]
            ]
Output: 0

Example 6

Input: $M = [
              [4, 0, 0, 0],
              [0, 1, 0, 7],
              [0, 0, 1,-1]
            ]
Output: 0

Reduced Row Echelon in Raku

sub is-first-echelon (@mat) {
    my @leading;
    for 0..@mat.end -> $i {
        my @row = |@mat[$i];
        for 0..@row.end -> $j {
            next if @row[$j] == 0;
            if @row[$j] == 1 {
                @leading[$i] = $j;
                last;
            } else {
            }
        }
        @leading[$i] = Inf unless defined @leading[$i];
    }
    return False unless [<] grep { $_ < Inf }, @leading; # rules 2 and 3
    return False unless [<=] @leading; 
    for 0..@leading.end -> $i {
        last if @leading[$i] == Inf;
        next unless defined @leading[$i];
        for 0..@mat.end -> $k {
            next if $i == @leading[$k];
            return False if @mat[$k][$i] != 0;
        }
    }
    return True;
}

my @tests = 
    [ [1,0,0,1], [0,1,0,2], [0,0,1,3]],
    [ [1, 1, 0], [0, 1, 0], [0, 0, 0]],
    [ [0, 1,-2, 0, 1], [0, 0, 0, 1, 3], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]],
    [ [1, 0, 0, 4], [0, 1, 0, 7], [0, 0, 1,-1]],
    [ [0, 1,-2, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 1, 3], [0, 0, 0, 0, 0]],
    [ [0, 1, 0], [1, 0, 0], [0, 0, 0]],
    [ [4, 0, 0, 0], [0, 1, 0, 7], [0, 0, 1,-1]];

for @tests -> @test {
    printf "%-20s => ", "@test[0] ...";
    say is-first-echelon @test;
}

This program displays the following output:

$ raku ./first-echelon.raku
1 0 0 1 ...          => True
1 1 0 ...            => False
0 1 -2 0 1 ...       => True
1 0 0 4 ...          => True
0 1 -2 0 1 ...       => False
0 1 0 ...            => False
4 0 0 0 ...          => False

Wrapping up

The next week Perl Weekly Challenge will start soon. If you want to participate in this challenge, please check https://perlweeklychallenge.org/ and make sure you answer the challenge before 23:59 BST (British summer time) on March 3, 2024. And, please, also spread the word about the Perl Weekly Challenge if you can.

The current echelon

dev.to #perl

Published by Simon Green on Sunday 25 February 2024 10:44

Weekly Challenge 257

Each week Mohammad S. Anwar sends out The Weekly Challenge, a chance for all of us to come up with solutions to two weekly tasks. My solutions are written in Python first, and then converted to Perl. It's a great way for us all to practice some coding.

Challenge, My solutions

Task 1: Smaller than Current

Task

You are given a array of integers, @ints.

Write a script to find out how many integers are smaller than current i.e. foreach ints[i], count ints[j] < ints[i] where i != j.

My solution

The second part of the condition does not need to be checked, as ints[j] will never be less than ints[i] when i and j are the same. In Python, this is a simple one liner:

def smaller_than_current(ints: list) -> list:
    return [sum(1 for j in ints if j < i) for i in ints]

which probably doesn't really need much explanation.

The Perl code is a little more complex as it doesn't easily allow a double for loop in a single line.

sub smaller_ints ( $ints, $target ) {
    return scalar( grep { $_ < $target } @$ints );
}

sub main (@ints) {
    my @results = map { smaller_ints( \@ints, $_ ) } @ints;
    say '(', join( ', ', @results ), ')';
}

Examples

$ ./ch-1.py 5 2 1 6
(2, 1, 0, 3)

$ ./ch-1.py 1 2 0 3
(1, 2, 0, 3)

$ ./ch-1.py 0 1
(0, 1)

$ ./ch-1.py 9 4 9 2
(2, 1, 2, 0)

Task 2: Reduced Row Echelon

Task

Given a matrix M, check whether the matrix is in reduced row echelon form.

A matrix must have the following properties to be in reduced row echelon form:

  1. If a row does not consist entirely of zeros, then the first non-zero number in the row is a 1. We call this the leading 1.
  2. If there are any rows that consist entirely of zeros, then they are grouped together at the bottom of the matrix.
  3. In any two successive rows that do not consist entirely of zeros, the leading 1 in the lower row occurs farther to the right than the leading 1 in the higher row.
  4. Each column that contains a leading 1 has zeros everywhere else in that column.

My solution

These are the tasks that I really like. It challenges me to take the requirements and interpret them into functioning code. I suppose today's kids just ask ChatGPT or Microsoft Co-pilot to write the code :P

As this code is a bit more complex than usual, I'll try and describe my solution as best I can. The first step is to take the JSON input, and validate the rows are all of the size.

def validate_matrix(matrix):
    rows = len(matrix)
    cols = len(matrix[0])

    for r in range(1, rows):
        # Check that all columns are of equal length
        if len(matrix[r]) != cols:
            raise ValueError(f'Row {r} has different number of columns')

The next thing I do is calculate the position of the leading (first) one in each row (or None in Python or -1 in Perl if there are no ones)

leading_one = [None if 1 not in row else row.index(1) for row in matrix]

I then iterate over each row. If the row is all zeros, there are no further checks required, so skip it. I also check that the first non-zero number is a one.

for row_num in range(len(matrix)):
    row = matrix[row_num]
    leading_one_pos = leading_one[row_num]

    if all(value == 0 for value in row):
        continue

    for value in row:
        if value == 1:
            break
        if value != 0:
            return 0

The next check I perform is to ensure that if the position of the leading one is higher than the position of the leading one of the previous row. I don't perform this check on the first row (where row_num == 0). If the previous row doesn't have any ones (i.e. is None), then the second rule (zeros at the end) isn't meet.

    if row_num != 0:
        if leading_one[row_num - 1] is None:
            return 0
        if leading_one[row_num - 1] > leading_one_pos:
            return 0

The last check I perform is to ensure that all other rows don't have a non-zero value at the position of the leading one in the current row. The easiest way to do this is to count the number of non-zero values in this column, and check if it is one (the current row).

    if sum(1 for row in matrix if row[leading_one_pos] != 0) != 1:
        return 0

If all the rows pass the checks, I'll return 1 at the end of the loop to indicate the matrix is in reduced row echelon form.

Examples

$ ./ch-2.py "[[1, 0, 0, 1], [0, 1, 0, 2], [0, 0, 1, 3]]"
1

$ ./ch-2.py "[[1, 1, 0], [0, 1, 0], [0, 0, 0]]"
0

$ ./ch-2.py "[[0, 1, -2, 0, 1], [0, 0, 0, 1, 3], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]"
1

$ ./ch-2.py "[[1, 0, 0, 4], [0, 1, 0, 7], [0, 0, 1, -1]]"
1

(cdlxxxiv) 9 great CPAN modules released last week

Niceperl

Published by Unknown on Sunday 25 February 2024 06:51

Updates for great CPAN modules released last week. A module is considered great if its favorites count is greater or equal than 12.

  1. CPAN::Changes - Parser for CPAN style change logs
    • Version: 0.500003 on 2024-02-22, with 31 votes
    • Previous CPAN version: 0.500002 was 3 months, 27 days before
    • Author: HAARG
  2. Expect - automate interactions with command line programs that expose a text terminal interface.
    • Version: 1.36 on 2024-02-23, with 27 votes
    • Previous CPAN version: 1.35 was 6 years, 9 months, 5 days before
    • Author: JACOBY
  3. IO::AIO - Asynchronous/Advanced Input/Output
    • Version: 4.81 on 2024-02-20, with 16 votes
    • Previous CPAN version: 4.8 was 10 months, 19 days before
    • Author: MLEHMANN
  4. Compress::Zlib - IO Interface to compressed data files/buffers
    • Version: 2.207 on 2024-02-18, with 16 votes
    • Previous CPAN version: 2.206 was 6 months, 24 days before
    • Author: PMQS
  5. Log::ger - A lightweight, flexible logging framework
    • Version: 0.042 on 2024-02-23, with 13 votes
    • Previous CPAN version: 0.041 was 18 days before
    • Author: PERLANCAR
  6. Module::CoreList - what modules shipped with versions of perl
    • Version: 5.20240223 on 2024-02-23, with 43 votes
    • Previous CPAN version: 5.20240129 was 25 days before
    • Author: BINGOS
  7. OrePAN2 - Yet another DarkPAN manager.
    • Version: 0.52 on 2024-02-19, with 13 votes
    • Previous CPAN version: 0.51 was 7 days before
    • Author: OALDERS
  8. perlfaq - Frequently asked questions about Perl
    • Version: 5.20240218 on 2024-02-18, with 12 votes
    • Previous CPAN version: 5.20230812 was 6 months, 6 days before
    • Author: ETHER
  9. SPVM - SPVM Language
    • Version: 0.989080 on 2024-02-23, with 31 votes
    • Previous CPAN version: 0.989073 was 8 days before
    • Author: KIMOTO

The present isn’t evenly distributed either

Perl Hacks

Published by Dave Cross on Saturday 24 February 2024 15:22

The future is already here – it’s just not very evenly distributed
– William Gibson

The quotation above was used by Tim O’Reilly a lot around the time that Web 2.0 got going. Over recent months, I’ve had a few experiences that have made it clear to me that even the present isn’t particularly evenly distributed either. It’s always easy to find people still using technologies that we would consider archaic (and not in a rustic or hipster way).

We’ve known for twenty years that CGI is a bad idea. It’s almost ten years since CGI.pm was removed from Perl core. Surely, all of us are using something modern for web development these days.

Well, apparently not. CGI is alive and well and living on the fringes of the Perl community. I’ve come across it being used in some quite surprising places over the last year or so. I’m going to obfuscate some details in the following descriptions to, hopefully, prevent you (or, worse, the people involved) from recognising the companies involved.

  • I did some work for a spectacularly big (and I mean huge) consultancy company. They wanted to decommission some old servers – which involved moving some Perl CGI programs that no-one had looked at for about fifteen years. These programs were, of course, running vital bits of the business. Anyone who had ever edited them had left the company at least ten years earlier. They wanted to do it as quickly as possible and change as little of the code as possible. The code was incompatible with even vaguely modern versions of Perl, so much of the work involved installing old versions of Perl (along with Apache and even mod_perl) on new hardware running up-to-date operating systems.
  • I picked up two or three freelancing gigs on Fiverr. And for the first time in years, I found myself working with low-end, rented, shared servers. At least one of them was one of those situations where you don’t have root access and are extremely hampered by the lack of software.
  • A couple of weeks ago, I got an email to my SourceForge email address asking for help with nms Formmail (some readers may be young enough that they haven’t heard of Matt’s Script Archive or the London Perl Mongers rewrite of those programs into what we called “modern Perl” twenty years ago). The email asked if our Formmail supported anti-spam measures like SPF, DMARC and DKIM. It was nostalgic to recall how different the web was back in the days when every web site had a mail form, a guest book and a hit counter. I see that SourceForge have removed the nms web site. I doubt I’ll ever get the time to work out what happened to it.  [Update: I was wrong about that. It’s been so long since I’ve looked at the nms project that I had forgotten the URL. The web site is still there in all its early-2000s car-crash web design glory.]
  • The following day I saw a question on Stack Overflow about a “classic mailing script”. And, yes, it was nms Formmail again. This user had moved their web site to a new server and it had stopped working. We never got the error log content that we asked them for, but the user confirmed my suspicion that the new web server had a newer version of Perl – one that was released after CGI.pm was removed. The nms project had (for obvious reasons) made heavy use of the module and its removal from core Perl has rendered the nms programs unusable on cheap servers where the sysadmin has no knowledge of or interest in installing any Perl modules that aren’t part of the standard package. Sadly, this means that Matt Wright’s original versions (that were never updated to use CGI.pm) still work in environments where the nms versions are useless.

None of this should be taken as an argument that the nms project was wrong to use CGI.pm or that the Perl 5 Porters were wrong to remove it from the Perl standard library. I still support both decisions. I just found it a bit jarring to be reminded that while we’re all using PSGI or Mojolicious to write microservices in Perl that serve REST APIs that are developed and deployed in Docker containers, there are still people out there who are struggling to FTP code that was written in 1997 onto low-end shared hosting.

I think this state of affairs has two causes. Firstly (like the first client I mentioned above) some systems were set up when CGI was still in common use – and things haven’t changed since. These people get a sudden shock when they are forced to move to a more modern server for some reason. And then there are people like my Fiverr clients who install Perl CGI programs because that’s what they have always done and they don’t know that there is an alternative approach. Part of the problem there is, presumably, that Perl has meant badly-written CGI programs for a large proportion of the web’s existence and means anyone searching for information on this subject is likely to find pages and pages of advice telling them how to install CGI programs before they discover anything about PSGI or Docker. And I think there might be a solution to that problem (or, at least, a way to nudge the web in the right direction).

Over last weekend I was cataloguing subdomains (I know how to have fun!) and I found a web site that I had forgotten about. I had obviously been contemplating a very similar situation back in 2016.

The site is called Perl Web Advice. The intention was (is?) that it would be a definitive source of good advice about how to develop and deploy web applications written in Perl. I had only made tiny inroads into the task before something else apparently seemed more fun and the project was abandoned.

But there’s the start of a framework for the site. And, this week, I’ve given it a GitHub Actions workflow so it gets republished automatically whenever changes are pushed to the repo. I’ve even set up a Dockerfile to make it easy to use the static site generator that I’ve used for it. So perhaps the idea has merit. Once there’s a bit more useful content there I could see if I can remember any of my SEO knowledge and get it appearing in results where people are looking for advice on this topic.

I would, of course, be happy to consider contributions from other people. What do you think? Would you like to help me save people from the hell of CGI deployments?

The post The present isn’t evenly distributed either appeared first on Perl Hacks.

How to develop simple DevOps project using Perl, Bash,Make and Docker

Perl on Medium

Published by Veselin Stanchev on Friday 23 February 2024 12:21

Target of the project is to use Bash, Make and Perl together and automate Perl script thought Docker container. Our project has 2 parts:

Convert Markdown to HTML

Perl Maven

Published by Gabor Szabo on Thursday 22 February 2024 10:30

I have lots of documents written in Markdown format and I was looking for a way to convert them to HTML.

How to use zlib (a C library) from Perl with SPVM

dev.to #perl

Published by Yuki Kimoto - SPVM Author on Thursday 22 February 2024 00:03

How to use zlib (a C library) from Perl with SPVM.

See an example to bind zlib to SPVM

SPVM provides a way to bind C language libraries and call them from Perl.

When binding C libraries to Perl, you typically write XS, but SPVM offers an alternative approach.

MyZlib.spvm

class MyZlib {
  native static method test : void ($ouf_file : string);
}

MyZlib.c

#include "spvm_native.h"
#include<stdio.h>

#include "zlib.h"

static const char* FILE_NAME = "MyZlib.c";

int32_t SPVM__MyZlib__test(SPVM_ENV* env, SPVM_VALUE* stack) {

  void* obj_out_file = stack[0].oval;

  if (!obj_out_file){
    return env->die(env, stack, "$ouf_file must be defined.", __func__, FILE_NAME, __LINE__);
  }

  const char* out_file = env->get_chars(env, stack, obj_out_file);

  char buf[]="0123456789abcdefghijklmnopqrstuvwxyz\n";
  int cnt = 0;
  gzFile zp;

  zp = gzopen(out_file, "w9");
  if(zp == NULL){
    return env->die(env, stack, "gzopen failed.", "MyZlib.c", __func__, FILE_NAME, __LINE__);
  }

  for(cnt = 0; cnt < 100; cnt++){
    gzputs(zp, buf);
  }

  gzclose(zp);

  return 0;
}

MyZlib.config

use strict;
use warnings;

use SPVM::Builder::Config;

my $config = SPVM::Builder::Config->new_gnu99(file => __FILE__);

$config->add_lib('z');

$config;

zlib.pl

use strict;
use warnings;

use FindBin;
use lib "$FindBin::Bin/lib";

use SPVM 'MyZlib';

my $out_file = "$ENV{HOME}/tmp/output.gz";

SPVM::MyZlib->test($out_file);

A compressed file "output.gz" will be output.

Nominate heroes for the 2024 White Camel Awards

Perl Foundation News

Published by Makoto Nozaki on Wednesday 21 February 2024 17:20

We are seeking nominations for the 2024 White Camel Awards, which honor remarkable non-technical contributions in the Perl community. The Board will consider all nominations and will seek input both from the Advisory Board and the Perl Steering Council.

To nominate an individual, kindly complete the form at https://forms.gle/xQczcsRkguvaBDBn8.

In light of our community’s growing diversity, we kindly ask that the rationale for each nomination be articulated in a manner accessible to those who may not be familiar with the nominee.

For reference, previous recipients of this award can be found at https://whitecamel.org/.


Dave writes:

This is my monthly report on work done during November-December 2023 covered by my TPF perl core maintenance grant.

I mainly continued my work on making the perl stack reference counted. As well as "unwrapping" a few more ops, I also took the opportunity to introduce some basic optimisations to get the speed of a PERL_RC_STACK perl interpreter build back closer to a vanilla build.

On my most recent branch (rc7, pushed today, 3rd Jan), the average of the 500 or so benchmarks in t/perf/benchmarks under PERL_RC_STACK has the following instruction read, conditional branches, etc results as compared to a vanilla perl build. 100% is unchanged, higher is better.

Ir 93.31 Dr 94.54 Dw 93.90 COND 92.50 IND 98.12

Note that the benchmark coverage is not yet comprehensive, and my optimising efforts will likely have been biased to make these numbers look better, rather than fixing the ops which aren't yet covered.

I've also made a start into looking at how XS code can be made (at least sometimes) to work directly under a ref-counted stack, rather than each XS call needing to be wrapped.

SUMMARY:

  • 86:42 make stack reference counted
  • 12:22 make stack reference counted - XS
  • 9:33 process p5p mailbox

    TOTAL:

  • 108:37 (HH::MM)

Perl Weekly #656 - Perl Conference

dev.to #perl

Published by Gabor Szabo on Monday 19 February 2024 06:25

Originally published at Perl Weekly 656

Hi there,

Did you get the opportunity to attend YAPC::Hiroshima?

Looking at whatever news is out in public about the conference, it appears to be a big success. A big round of applause to everyone involved. Makoto Nozaki shared his experience in the blog post. There were regular updates shared on Twitter profiles e.g. kobaken and yapcjapan. Japan is one of few places that I always wanted to visit. I still remember when I was in college my mom asked me she wanted to see Tokyo city. I casually promised her that time. But when I moved to England she kept reminding me about my promise but for health reason she couldn't travel. I was first introduced to the city when I watched the movie Love in Tokyo. I think YAPC Japan would be the perfect excuse to fulfill my mom's wish. Israel is also one place that I would like to visit once in my life time and meet Gabor Szabo in person.

How about upcoming TPRC 2024 in Las Vegas?

I remember when it was annonced at the end of conferece in Toronto last year, there was big cheers all around. I could feel the positive energy. There was a call for volunteer and presentation. If I managed to find time and health permit then I would definite go to Las Vegas. I am sure it is going to beat the Toronto experience. I would submit the talk only when I am 100% sure to travel. I really miss the similar gatherings in Europe. Talking about conference, what's happening to London Perl Workshop? Don't you miss LPW? I honestly hope it happens this year and we get to meet local champions. It is the only time, I get to meet my idols like Neil Bowers and Dave Cross. There is also a friend of mine, Theo van HoeselLPW and London Perl Mongers meetup, I miss him. I remember during one such meetup he gave short presentation on Iphone iOS scripting. I simply loved it. His ability to present difficult topic looks easy, is commendable. Let's bring back the golden moments.

Back to reality, the schools are open today after a week long holiday here in London. Too much trouble, I wonder how parents cope up with this routine. I just go with the flow, no choice. You look after yourself and loved ones. Enjoy rest of the newsletter.

--
Your editor: Mohammad Sajid Anwar.

Perl Jobs by Perl Careers

UK Remote Perl Programmer for Leading Enterprise Tech Publication

Our client is a global leader in the enterprise technology publishing industry, providing audiences worldwide with stimulating perspectives and unique news on enterprise tech that matters today and tomorrow. They are seeking a talented Perl programmer to manage the full life-cycle of software projects on a remote basis.

Announcements

TPRC 2024 Call For Papers is now open!

Time to make first move and submit your ideas for talk. First timers are also welcome.

CPAN Security Group

Welcome to the CPAN Security Group. This is a community effort for supporting and responding to security incidents on CPAN.

Articles

PSC #136 2024-02-15

Another weekly update from the Perl Steering Council. Thank you PSC for all the hard work.

Perl Steering Council Meetings

As you get weekly PSC updates here but what if you want historical updates. This website presents this in user friendly layout.

Will You Lose Your Job to AI?

Not specific to Perl but worth every second of yours. The topic is something you do not want to miss.

Codeforces Command Lines

For all Perl fans, if you are into competitive programming then you should give this a try.

The Weekly Challenge

The Weekly Challenge by Mohammad Sajid Anwar will help you step out of your comfort-zone. We pick one champion at the end of the month from all of the contributors during the month.

The Weekly Challenge - 257

Welcome to a new week with a couple of fun tasks: "Smaller than Current" and "Reduced Row Echelon". If you are new to the weekly challenge, why not join us and have fun every week? For more information, please read the FAQ.

RECAP - The Weekly Challenge - 256

Enjoy a quick recap of last week's contributions by Team PWC dealing with the "Maximum Pairs" and "Merge Strings" tasks in Perl and Raku. You will find plenty of solutions to keep you busy.

TWC256

Clever use of map in Perl make this solution worth checking. Keep it up great work.

Merged Maximum

Every week we get to learn something new in Raku. This week was 'roundrobin'. Thanks for sharing.

Perl Weekly Challenge: Week 256

Method chaining in Raku makes the code so beatiful. You can easily come up with one liner.

Zippairs

Compact yet elegant solutions in Perl. Cool, keep it up.

Perl Weekly Challenge 256: Maximum Pairs

No more magic, pure core solutions in Perl and Raku. Thanks for sharing.

Perl Weekly Challenge 256: Merge Strings

A detailed discussion talking about Raku magics. Highly recommended.

Valentine's Challenge

Thanks for sharing the inner details of zip. All Raku fans must checkout this.

Perl Weekly Challenge 256

Master of one-liners in Perl, sharing yet another special one. Keep it up great work.

Merge the Maximum String Pairs

I got the taste of reverse and flip in Raku during my early days with Raku. Thanks for sharing the details.

Pairs, sriap and MsEtRrGiEngs

The analysis section of the post is the highlight for me every week. Highly recommended.

The Weekly Challenge #256

Dudn't know about mesh function. Thanks for sharing knowledge with us.

Maximum Strings

Raku and JavaScript are the choosen one this week. You must checkout to get the reason.

Matching and zipping

It is rare event when you get to see one liner in Python. Thanks for your contribution.

PWC 256

Like every week, explore the power of Perl4 and old Python.

Rakudo

2024.07 Dr Raku

Weekly collections

NICEPERL's lists

Great CPAN modules released last week;
MetaCPAN weekly report;
StackOverflow Perl report.

You joined the Perl Weekly to get weekly e-mails about the Perl programming language and related topics.

Want to see more? See the archives of all the issues.

Not yet subscribed to the newsletter? Join us free of charge!

(C) Copyright Gabor Szabo
The articles are copyright the respective authors.

I read Meeting Design

rjbs forgot what he was saying

Published by Ricardo Signes on Sunday 18 February 2024 19:04

For a few months now, I’ve been putting off reading any of the management and leadership related books in my queue. For whatever reason, my internal gears recently turned enough that I felt like picking one up. Probably it’s because I spent a week in Vienna. I should write about that, too. Anyway, I picked up one of the books on my list and read it, and that book was Meeting Design by Kevin M. Hoffman.

the book cover

I had mixed feelings about it. I don’t quite think it delivered on what it promised, but I think it’s got useful thoughts and suggestions in it. There’s a kind of book where I read it and I think, “There should be a second edition that really nails this,” but it rarely happens. Most second editions are of books that nailed it the first time, not books that needed a second version. Anyway, I’m putting Meeting Design in that category.

Here’s an early section that really set my expectations high:

Design is an intangible currency that separates things that matter from junk. Something designed has been given appropriate and actionable consideration, with forethought and research guiding its creation and ongoing evolution.

Meetings are usually not designed. They are rather used as blunt force, expensive but ill-considered tools to solve communications problems.

The author provides this summary of the design process:

  1. Clearly define the problem that a design should solve through observation and good old-fashioned research.
  2. Create and consider multiple options, as opposed to sticking to a single solution.
  3. Select the option assumed to be the best and begin an iterative effort to refine it from a minimum viable concept. This contrasts with spending excessive time visualizing the finished product in every gory detail.
  4. Execute or “ship” at an agreed-upon level of fidelity so that you have an opportunity to see how the design fares in the real world with real people. After that, jump back to step one as needed.

From these early passages, I formed an expectation of the book: it would provide an idea about how to consider and compare meeting forms, how to measure their effectiveness, and how to improve meetings over time based on iterative review and refinement. I wanted the book’s content and structure to focus on making me good at doing those things. In the end, I don’t think that’s how the book worked.

Instead, the first half was a few chapters describing aspects of meetings, like facilitation, agendas, or managing conflict. These are topics worth covering, but I felt the material was much more about advice than about leveraging these things based on desired outcomes. That theme was there, but it didn’t feel central, compared to things like the advice “don’t fifteen bullets on your slide”.

I would’ve liked to see a clearer division between universal advice (no, you never want fifteen bullets on the slide) and description of the choices one can make to achieve different outcomes (maybe ask questions out loud, maybe take written submissions). Because those two kinds of things were presented together, it was sometimes unclear what was advice and what was a choice. Also, the choice between two options was often provided by showing when one of them was bad, as opposed to the ways in with both could be good or bad. This often came in the form of an anecdote, something like this text, which I’ve written to make my point:

Alice had to make sure everyone knew how to use the new system. Upon getting her thirty team members in a room, she started by asking for examples of flaws in the old system. This led to thirty minutes of complaints about the system she wanted to get rid of. Imagine, instead, that she had stated a few examples in one minute, and then moved on to explaining the new system. This would have been better.

Every time an anecdote like this was deployed, it tended to feel like universal advice, even when it might have been about showing whether a choice was good or bad in a specific circumstance.

I won’t belabor the point further, but: I think the premise was good, and the execution could use more refinement.

Part 2 of the book is a catalog of meeting templates, organized into meetings that begin endeavors, happend during them, and wrap them up. For each meeting, there’s a description of the goal of such a meeting, the means of measuring the effectivness of the meeting, and a detailed sample agenda. It runs about eighty pages.

A section like this could have felt like old hat. I’ve read plenty of descriptions of how to run various sorts of meetings, including many of the ones in this section. What made the catalog of meetings so interesting, to me, was the way in which each one was presented in the same framework. It hammered home that for any meeting, it should be possible to decide on the goal, and that it should be possible to review the effectiveness of the meeting toward achieving that goal. I also appreciated small details in the description of meetings, like the way in which two similar meetings differ, and how techniques for one might confound the success of the other. Also, a number of these sections had helpful pointers to further reading on specific meetings.

These descriptions also often included specific techniques, like “draw a line on the whiteboard and have everyone put stickies above or below it”. These linked back, either explicitly or implicitly, to some of the choices that were discussed or gestured at by the first section of the book. This made the questions of intentional design more clear and interesting.

When I was halfway through the book, I thought it was a bit of a dud, but that it had at least given me some new ways to think about running meetings. By the end, though, I felt I’d probably pull the book off the shelf again in the future to consult the catalog and think about what patterns might be useful for my own meetings.

Finally, there was a good sidebar from Adam Connor, describing the idea of working backward from the final outcomes required to the kind of meeting and meeting process required. This kind of “working backward from the goal” is often the way I like to build things, and I’m not sure I ever really considered applying it to meetings. In retrospect, it’s obvious, but that’s often the way.

With this book done, I am ready to pull down and read the next book off my management and leadership shelf. I’m just not sure which one it will be, yet.

What is Perl ? : A Comprehensive Exploration

Perl on Medium

Published by Benkaddour Racim on Sunday 18 February 2024 16:03

Matching and zipping

dev.to #perl

Published by Simon Green on Sunday 18 February 2024 11:04

Weekly Challenge 256

Each week Mohammad S. Anwar sends out The Weekly Challenge, a chance for all of us to come up with solutions to two weekly tasks. My solutions are written in Python first, and then converted to Perl. It's a great way for us all to practice some coding.

Challenge, My solutions

Task 1: Maximum Pairs

Task

You are given an array of distinct words, @words.

Write a script to find the maximum pairs in the given array. The words $words[i] and $words[j] can be a pair one is reverse of the other

My solution

For this task, I have a loop that takes the last value from the words array and store it in the word variable. I then see if its reverse is in the words array, and increment the count if it is. I continue this until the original array is exhausted.

def count_pairs(words: list) -> int:
    count = 0

    while words:
        word = words.pop()

        if word[::-1] in words:
            count += 1

    return count

Examples

$ ./ch-1.py ab de ed bc
1

$ ./ch-1.py aa ba cd ed
0

$ ./ch-1.py uv qp st vu mn pq
2

Task 2: Merge Strings

Task

You are given two strings, $str1 and $str2.

Write a script to merge the given strings by adding in alternative order starting with the first string. If a string is longer than the other then append the remaining at the end.

My solution

My solution will take any number of strings, be it one, two (as per the task) or more. Thankfully Python has the zip_longest function from itertools to make the task a one-liner.

def merge_strings(words: list) -> str:
    return ''.join(''.join(s) for s in zip_longest(*words, fillvalue=''))

The zip_longest function returns a iterable of tuples (with an empty string if one list is exhausted). The inner join turns this into a list of strings. The outer join turns this into a string.

The Perl solution follows a similar logic, and uses the mesh function from List::Util. The first lines converts an array of strings into an array of single characters. The mesh function returns a flat array, so only a single join statement is required.

sub main (@words) {
    my @arrays = map { [ split // ] } @words;
    say join( '', mesh(@arrays) );
}

Examples

$ ./ch-2.py abcd 1234
a1b2c3d4

$ ./ch-2.py abc 12345
a1b2c345

$ ./ch-2.py abcde 123
a1b2c3de

(cdlxxxiii) 7 great CPAN modules released last week

Niceperl

Published by Unknown on Sunday 18 February 2024 08:45

Updates for great CPAN modules released last week. A module is considered great if its favorites count is greater or equal than 12.

  1. App::DBBrowser - Browse SQLite/MySQL/PostgreSQL databases and their tables interactively.
    • Version: 2.405 on 2024-02-12, with 14 votes
    • Previous CPAN version: 2.404 was 11 days before
    • Author: KUERBIS
  2. App::Netdisco - An open source web-based network management tool.
    • Version: 2.072003 on 2024-02-14, with 16 votes
    • Previous CPAN version: 2.072002 was 24 days before
    • Author: OLIVER
  3. CPAN::Audit - Audit CPAN distributions for known vulnerabilities
    • Version: 20240215.001 on 2024-02-16, with 13 votes
    • Previous CPAN version: 20240209.001 was 6 days before
    • Author: BDFOY
  4. Net::DNS - Perl Interface to the Domain Name System
    • Version: 1.44 on 2024-02-15, with 26 votes
    • Previous CPAN version: 1.43 was 20 days before
    • Author: NLNETLABS
  5. OrePAN2 - Yet another DarkPAN manager.
    • Version: 0.51 on 2024-02-12, with 13 votes
    • Previous CPAN version: 0.50 was 2 days before
    • Author: OALDERS
  6. Spreadsheet::Read - Meta-Wrapper for reading spreadsheet data
    • Version: 0.90 on 2024-02-13, with 31 votes
    • Previous CPAN version: 0.89 was 1 month, 11 days before
    • Author: HMBRAND
  7. SPVM - SPVM Language
    • Version: 0.989073 on 2024-02-15, with 31 votes
    • Previous CPAN version: 0.989070 was 5 days before
    • Author: KIMOTO

(dlxxxi) metacpan weekly report - Type::Tiny

Niceperl

Published by Unknown on Sunday 18 February 2024 08:43

This is the weekly favourites list of CPAN distributions. Votes count: 56

Week's winner (+3):  Type::Tiny

Build date: 2024/02/18 07:41:35 GMT


Clicked for first time:


Increasing its reputation:

(dciv) stackoverflow perl report

Niceperl

Published by Unknown on Sunday 18 February 2024 08:39

@cpan.org email deliverability issues

The Perl NOC

Published by Unknown on Saturday 17 February 2024 13:29

We've come across some snags with emails sent to @cpan.org addresses since switching our forwarding system. Delays and bounces are happening more often than usual.

While we understand this is inconvenient, addressing this issue will require significant technical adjustments. As a result, we are unable to offer a specific timeframe for a resolution at this time.

Bottom line: if an receiving an email is urgent or crucial, don't use @cpan.org. For important emails, opt for using another address with better deliverability.

What's new on CPAN - January 2024

perl.com

Published on Saturday 17 February 2024 00:00

Welcome to “What’s new on CPAN”, a curated look at last month’s new CPAN uploads for your reading and programming pleasure. Enjoy!

APIs & Apps

Data

Development & Version Control

Hardware

  • Device::Chip::SCD4x lets you communicate with a Sensirion SCD40 or SCD41 CO2 sensor via an I²C adapter
  • IPCamera::Reolink provides a REST API to interact with Reolink IP cameras and NVRs

Language & International

Science & Mathematics

Web

Other

TPRF 2024 Call For Papers is now open!

Perl Foundation News

Published by Amber Krawczyk on Thursday 15 February 2024 15:34


TPRC 2024 is being held in Las Vegas, NV from June 24-28 2024. You can submit your talk Ideas for TPRC 2024 at https://tprc.us/talks . Talk submission deadline is April 5th, Midnight UTC. Talks must be given live and in-person. If you are looking for any talk ideas, try out the conference wiki.

New this year, we are accepting submissions for a peer reviewed Science track. Those talks should be submitted at https://science.perlcommunity.org/

Visit the TPRC 2024 website at https://tprc.us/ Follow us on Twitter: @PerlConferences Like us on Facebook: The Perl Foundation (@tpf.perl) Subscribe to the mailing list: https://tprc.us/subscribe

Comparing Kotlin, Go (Golang), Rust, Scala, and Perl Programming Languages

Perl on Medium

Published by Allen Glines on Wednesday 14 February 2024 20:14

In software development, the choice of programming language significantly impacts applications' design, implementation, and performance…

TONYC Grant Report November 2023

Perl Foundation News

Published by Saif Ahmed on Tuesday 13 February 2024 15:55


TONYC Activity report

Tony continues to work hard in maintaining the core of Perl 5. This is his activity report for November 2023.

``` [Hours] [Activity] 2023/11/01 Wednesday 1.30 look into intermittent File-Find/t/taint.t failures: cannot reproduce 1.70 #21261 review, try to reproduce reported failures (logs expired), finally reproduce on windows, debugging

0.60 #21261 testing, work out the issue and comments

3.60

2023/11/02 Thursday 1.40 #21567 research and long comment and approve 0.08 #21513 review and approve 0.73 #21535 set up build environment

2.78 #21535/#21533 testing, fix three issues and PR 21610

4.99

2023/11/06 Monday 0.58 github notifications, VM setup for khw to test locales /threads smoke issues 2.65 #21535 resolve win32 issues, signbit fallback problems, old VC support issues and lots of testing, start vc2015 download 1.38 #21535 get it installed and troubleshoot, testing, push for CI 0.70 bury MSVC 2013/aka VC12, it’s already dead, testing,

research

5.31

2023/11/07 Tuesday 1.38 diagnose vs2013 build failure, more testing, commit message and push to smoke-me 0.08 #21586 review and apply to blead 0.48 retiring vs2013: look over smoke results, fix and push

0.80 #21550 review discussion, test builds, comments

2.74

2023/11/08 Wednesday 0.92 #21621 review, comment 0.43 #21621 more review, more comment 0.72 #21550 review patches that led to this, comment 1.63 #21513 discussion with khw and research on smoke failures from merge, valgrind setup, testing, but valgrind appears

broken

3.70

2023/11/09 Thursday 1.00 #21513 try to get valgrind working to debug this on dragonfly 0.85 #21535 apply to blead, update perldelta 0.27 retiring vs2013 support: open PR 21624

1.40 #21623 testing, research, comment

3.52

2023/11/10 Friday

1.12 #21621 review some more, comment

1.12

2023/11/13 Monday 0.12 #21621 review updates and approve 0.73 #21624 updates, research and push for CI 1.40 #21469 setup test environment, testing and comment 1.10 #21623 re-work globvar.t, testing, start test on AIX5 0.70 #21623 test on HP-UX, push for smoke-me 0.20 #21635 review, research and approve 0.10 #21634 review and comment

0.75 prep -Wconversion work (such as it is), make PR 21636

5.10

2023/11/14 Tuesday 0.20 #21634 research, briefly comment 1.17 #21636 re-work 1.22 look into Dave’s Test-Harness SIGINT issue, comment on list 0.63 #21624 apply to blead, perldelta 0.47 #21629 review CI results, research and long-ish comment 0.32 #21623 re-check, make PR 21637

0.78 #21550 work out what’s going on

4.79

2023/11/15 Wednesday

0.63 #21629 comment

0.63

2023/11/16 Thursday 1.75 review attributes thread 0.17 #21637 apply to blead and perldelta 0.87 #21633 test possible causes on dragonfly, find one, discuss with khw, report upstream as https://bugs.dragonflybsd.org/issues/3361 0.18 #21633 check for similar setlocale issue (not found) 0.33 #21638 review and approve 0.28 #21639, #21640 research and comment on each (they’re very

similar)

3.58

2023/11/17 Friday 0.20 github notifications 0.50 #21091 testing, comment

0.23 #21643 review, testing, comment

0.93

2023/11/20 Monday 0.58 github notifications 0.80 #21641 review, research, comment and approve 0.08 #21644 review and approve 0.22 #21612 review discussion, research and comment 0.60 #21647 review, testing and approve 0.47 #21642 start review 0.80 #21633 zoom setup, zoom with khw 1.72 #21642 more review, first pass done, need to do an

integrated review

5.27

2023/11/21 Tuesday 0.10 github notifications 0.60 #21643 research, comment and approve 0.12 #21650 review and comment

0.80 #21651 research, testing and comment

1.62

2023/11/22 Wednesday 0.20 review list discussion 0.08 #21655 review and approve 0.60 #21653 review discussion, review code 0.27 #21653 more review and approve 0.63 #21654 research and comment

2.18 #21642 more review

3.96

2023/11/23 Thursday 0.98 #21654 long-ish comment 0.57 #21642 more review, comment on minor issue and approve 0.20 #20308 re-review, comment and approve 0.35 #19426 rebase, testing and comment 1.87 #21654 testing, profiling, work on possible fix, re-work 1.68 #21654 profile patched version, push for CI, get an error,

investigate and fix, push again and wait for sanity run

5.65

2023/11/27 Monday 2.12 #21661 debugging, long-ish comment 1.30 #21654 try to work up a test

2.27 #21654 more work on test, testing, push to PR

5.69

2023/11/28 Tuesday 0.60 #21636 review comments, research and follow-up comment 1.33 #21654 review CI results, testing, work up a skip, more testing, push for CI/smoke-me 0.77 #21670 review, testing, approve 0.15 #21666 research, review and approve

0.27 #21659 review and apply to blead

3.12

2023/11/29 Wednesday 0.08 #21591 apply to blead (I don’t think it needs perldelta) 0.12 #21654 adjust the sanitize check 1.00 #21562 comment 0.28 #21677 start to ask for response, look over libperl.t code and realize it’s fixed, comment 3.47 #21661 work on fix, testing, fix issues, more testing push

for smoke/ci

4.95

2023/11/30 Thursday 0.73 #21654 remove the performance tests, they were too flakey, minor re-work 1.48 #21661 work on regression tests, better commit message, push for smoke/CI 0.25 #21663 review and apply to blead 0.67 #21677 work on skip in maint, testing, push for CI 0.10 #21135 follow-up 0.08 #21677 check CI and make PR 21679 1.93 #13814 define new fatal once flag, try to work out warning

bits handling

5.24

Which I calculate is 75.51 hours.

Approximately 42 tickets were reviewed or worked on, and 7 patches were applied.

```

PEVANS Core Perl 5: Grant Report for January 2024

Perl Foundation News

Published by Saif Ahmed on Sunday 11 February 2024 14:25


PEVANS Core Developement

It is difficult to narrow down the depth of PEVANS activity in the Perl Core. Continuing to modernise the Core is vital for the longevity of Perl and introduction of modern paradigms. To do this without breaking Perl is an extra challenge. FOSDEM provided such an opportunty to review what the Paul and the PSC has been upto, and may allow some insight of the builtin excitement that is due to land with Verson 5.40.


DateActivityHours
2023/12/29updates to `meta`, next version 2
2021/12/31further work on `meta`, add ->get method 1
2024/01/03Further experimentation with `meta` 1
2024/01/04`meta` experimental warnings 2
2024/01/05more `meta` warnings 1
2024/01/05meta get_or_add methods 2
2024/01/11Initial poking at qt strings ( [PPC0019](https://github.com/Perl/PPCs/blob/main/ppcs/ppc0019-qt-string.md) ) 3
2024/01/17`use VERSION` to import builtin bundle 4
2024/01/19Reword builtin import for resetting 3
2024/01/22Add `builtin::inf` and `builtin::nan` 0.5
2024/01/25More inf + nan 1
2024/01/25Improvements to pad tombstone handling 4
2024/01/26Management of recent PRs 1
2024/01/31lexical subroutine shadow warnings 3

ADDENDUM

Paul has submitted a more detailed report of his activity:

Hours:

9 = Updates to the meta module, a new CPAN release, adding a ->get method, adding experimental warnings, ->get_or_add methods https://metacpan.org/pod/meta https://github.com/Perl/PPCs/blob/main/ppcs/ppc0022-metaprogramming.md

3 = Initial investigation into implementing PPC0019 "Quoted template strings" https://github.com/Perl/PPCs/blob/main/ppcs/ppc0019-qt-string.md

7 = Getting use VERSION to import a feature bundle https://github.com/Perl/perl5/pull/21850

1.5 = Adding builtin::inf and builtin::nan https://github.com/Perl/perl5/pull/21872

5 = Improvements to PADNAMEf_TOMBSTONE handling https://github.com/Perl/perl5/pull/21887

3 = Lexical subroutine shadow warnings https://github.com/Perl/perl5/pull/21915

(cdlxxxii) 9 great CPAN modules released last week

Niceperl

Published by Unknown on Sunday 11 February 2024 00:13

Updates for great CPAN modules released last week. A module is considered great if its favorites count is greater or equal than 12.

  1. App::Sqitch - Sensible database change management
    • Version: v1.4.1 on 2024-02-04, with 43 votes
    • Previous CPAN version: v1.4.0 was 6 months, 3 days before
    • Author: DWHEELER
  2. CPAN::Audit - Audit CPAN distributions for known vulnerabilities
    • Version: 20240209.001 on 2024-02-10, with 12 votes
    • Previous CPAN version: 20240117.001 was 24 days before
    • Author: BDFOY
  3. Log::ger - A lightweight, flexible logging framework
    • Version: 0.041 on 2024-02-05, with 12 votes
    • Previous CPAN version: 0.040 was 1 year, 7 months, 25 days before
    • Author: PERLANCAR
  4. LWP::Protocol::https - Provide https support for LWP::UserAgent
    • Version: 6.13 on 2024-02-06, with 20 votes
    • Previous CPAN version: 6.12 was 15 days before
    • Author: OALDERS
  5. MIME::Body - Tools to manipulate MIME messages
    • Version: 5.503 on 2024-02-06, with 12 votes
    • Previous CPAN version: 5.513 was 12 days before
    • Author: DSKOLL
  6. OrePAN2 - Yet another DarkPAN manager.
    • Version: 0.50 on 2024-02-10, with 13 votes
    • Previous CPAN version: 0.49 was 1 year, 5 months, 4 days before
    • Author: OALDERS
  7. Software::License - packages that provide templated software licenses
    • Version: 0.104006 on 2024-02-09, with 15 votes
    • Previous CPAN version: 0.104005 was 2 months, 18 days before
    • Author: LEONT
  8. SPVM - SPVM Language
    • Version: 0.989070 on 2024-02-10, with 31 votes
    • Previous CPAN version: 0.989068 was 19 days before
    • Author: KIMOTO
  9. URI - Uniform Resource Identifiers (absolute and relative)
    • Version: 5.27 on 2024-02-09, with 113 votes
    • Previous CPAN version: 5.26 was 7 days before
    • Author: OALDERS

Vulnerable Spreadsheet Parsing modules

CPAN Security Group

Published by Timothy Legge on Saturday 10 February 2024 17:23

Between Dec 2023 and Jan 2024, vulnerabilities in Spreadsheet::ParseExcel and Spreadsheet::ParseXLSX were reported to the CPAN Security Group (CPANSec). This document describes the timeline and analysis of events.

CVE-2023-7101: Spreadsheet::ParseExcel arbitrary code execution vulnerability

Đình Hải Lê discovered an arbitrary code execution (ACE) vulnerability in the Perl module Spreadsheet::ParseExcel, version 0.65 and earlier. An attacker, exploiting this vulnerability, would craft an Excel file containing malicious code encoded as a number format string, which is executed when the file is parsed by Spreadsheet::ParseExcel. Basically, untrusted data is passed to the Perl eval function enabling arbitrary code execution.

A detailed write up of the vulnerability and Proof of Concept (PoC) is available at https://github.com/haile01/perl_spreadsheet_excel_rce_poc

It was allegedly used by UNC4841, a China-backed threat actor, to compromise Barracuda Email Security Gateway (ESG) appliances, and is considered a root cause for CVE-2023-7102. (https://www.barracuda.com/company/legal/esg-vulnerability)

CVE-2024-22368: Spreadsheet::ParseXLSX denial of service vulnerability

Đình Hải Lê discovered a DoS vulnerability in Spreadsheet::ParseXLSX, version 0.27 and earlier, enabling denial of service attacks via out-of-memory bugs when parsing a crafted XLSX file.

Basically, an attacker could create a spreadsheet file and set a merged cell to include all possible cells in the spreadsheet. Because of the way vulnerable versions of Spreadsheet::ParseXLSX parsed the file, it would allocate huge amounts of ram to track the merged cell. Simply uploading a simple spreadsheet to a web application using the vulnerable module would cause a denial of service as all memory on the server was used.

A detailed write up of the vulnerability and PoC is available at https://github.com/haile01/perl_spreadsheet_excel_rce_poc/blob/main/parse_xlsx_bomb.md.

It is not known whether this vulnerability was used to cause a denial of service on a production server.

CVE-2024-23525: Spreadsheet::ParseXLSX XML external entity attack vulnerability

An Pham discovered a XML external entity injection (XXE) vulnerability in Spreadsheet::ParseXLSX version 0.29 and earlier, enabling an attacker to interact with the system

This is a classic XML external entity (XXE) injection vulnerability, in which the attacker can cause the vulnerable code to include data (or a file) that should not be available, by simply instructing the XML parser to load external data. The PoC also includes an example that would cause a DoS.

Configuring an XML parser to allow loading external entities is dangerous and should never be the default.

A detailed write up of the vulnerability and PoC is available at https://gist.github.com/phvietan/d1c95a88ab6e17047b0248d6bf9eac4a.

Timeline

October 2022 to November 2023

On October 23rd, Đình Hải Lê (https://github.com/haile01) started to investigate the Spreadsheet::ParseExcel module after noticing that eval was called in the source code.

On October 26th, Đình Hải Lê was able to successfully create a PoC for both the Arbitrary Code Execution (ACE) vulnerability in Spreadsheet::ParseExcel (CVE-2023-7101) and the out-of-memory Denial of Service (DoS) vulnerability in Spreadsheet::ParseXLSX (CVE-2024-22368).

On November 17th, Đình Hải Lê attempted to contact the last maintainer to release a version of Spreadsheet::ParseExcel regarding the ACE vulnerability and attempted to contact the author of Spreadsheet::ParseXLSX regarding the out-of-memory DoS vulnerability.

Unfortunately neither contact attempt succeeded.

On March 15th, the Initial PoC was published on Github by Đình Hải Lê.

On June 20th, Đình Hải Lê submitted both bugs to huntr.com. huntr.com supports an open source vulnerability disclosure program, where any member of the public can report vulnerabilities found in repositories on GitHub.com. huntr follows a responsible disclosure program as documented at https://huntr.com/guidelines/.

On June 21st, the PoC published by Đình Hải Lê was referenced by a huntr.com representative in an issue logged in two Github repositories (Spreadsheet::ParseExcel and Spreadsheet::ParseXLSX) as:

Unfortunately, there is no indication that the owners of either the Spreadsheet::ParseExcel git repository or the Spreadsheet::ParseXLSX git repository saw either of the issues.

In addition, there were no issues logged at https://github.com/runrig/spreadsheet-parseexcel, which was the GitHub repository referenced in version 0.65 of the Spreadsheet::ParseExcel module on MetaCPAN, nor were any issues logged on Request Tracker, the traditional issue tracker for Perl modules, https://rt.cpan.org/Dist/Display.html?Queue=Spreadsheet-ParseExcel or https://rt.cpan.org/Public/Dist/Display.html?Name=Spreadsheet-ParseXLSX.

December 2023

At some point between the time CVE-2023-7101 was discovered, and the time it was fixed, malicious threat actors used the vulnerability to compromise an undisclosed number of Barracuda Email Security Gateways. At this time no one has provided the exact timing of the compromise.

On December 21st, Barracuda pushed patches to all Barracuda Email Security Gateway (ESG) appliances to fix CVE-2023-7102.

On December 22nd, Barracuda pushed patches to previously compromised ESGs (https://www.barracuda.com/company/legal/esg-vulnerability).

On December 24th, Mandiant (a Google owned Incident Response company) issued CVE-2023-7101 and published a related disclosure, MNDT-2023-0019 (https://github.com/mandiant/Vulnerability-Disclosures/blame/master/2023/MNDT-2023-0019.md).

On December 27th, the Cybersecurity and Infrastructure Security Agency (CISA) emailed all prior maintainers of the Spreadsheet::ParseExcel module.

On December 28th, the CISA forwarded the email to the CPAN Security Group mailing list. CPANSec then took the following steps during the next 24 hours:

  • CPANSec reached out to a former maintainer, John McNamara, who still had primary permissions (FIRSTCOME) which would allow him to release an updated version.
  • McNamara released version Spreadsheet::ParseExcel 0.66 which included a patch provided by Daniel Ruoso (https://github.com/ruoso) that resolved the issue.
  • CPANSec notified the oss-security mailing list, and downstream distributions like Alpine Linux, Arch Linux, NixOS and Debian. Note that Debian already had a patch on the way when we reached out.

January 2024

On January 2nd, Michael Daum released version Spreadsheet::ParseXLSX version 0.28 with fixes for the DoS vulnerability CVE-2024-22368. The CPANSec requests a CVE identifier from MITRE.

On January 9th, MITRE publishes their analysis of CVE-2024-22368

On January 10th, CPANSec notifies the oss-security mailing list

On January 17th, Michael Daum released another update to Spreadsheet::ParseXLSX version 0.30 with fixes for a XXE attack vulnerability. CPANSec requests a CVE identifier. CVE-2024-23525 was issued on January 17th, 2024 for the XXE vulnerability.

On January 18th, CPANSec notifies oss-security mailing list and Michael Daum released Spreadsheet::ParseXLSX version 0.31 which referenced CVE-2024-23525 which had been fixed in version 0.30.

Responsible Disclosure

Based on the information provided by Đình Hải Lê, and publicly available information, it appears that Đình Hải Lê and/or other parties followed a responsible disclosure process. Attempts to contact the previous maintainers were followed by a reasonable waiting period before the PoC was published. After the PoC was published huntr.com also attempted to contact the previous maintainers.

Resolution

After CVE-2023-7101 was issued, a patch to fix the vulnerability was written by Daniel Ruoso (https://github.com/ruoso) and submitted as a pull request to the GitHub repository. Often, in the case of modules with absent or unresponsive maintainers (Appendix A), a patch could languish requiring a user to apply the patch manually. However, in this case the CPANSec asked the module’s FIRSTCOME (appendix A) author John McNamara (JMCNAMARA) to release a patched version. JMCNAMARA had been copied on the notification by CISA and was engaged in the conversation making the resolution faster than in might have otherwise been.

The DoS vulnerability in Spreadsheet::ParseXLSX (CVE-2024-22368) was patched by Michael Daum (NUDDLEGG). Daum was made the new owner after contacting the previous module owner (DOY) and volunteering to maintain the module. Daum released version 0.28 on January 2nd, 2024 to resolve the issue.

The XML external entity (XXE) injection vulnerability in Spreadsheet::ParseXLSX (CVE-2024-23525) was patched by Michael Daum and version 0.30 was released on January 17th, 2024 to resolve the issue and a final version 0.31 to reference the CVE number on January 18th, 2024.

Appendix A

CPAN

The Comprehensive Perl Archive Network (CPAN) is the world’s oldest Open Source language ecosystem and publishing platform. Having existed since 1995, it has seen and been part of the massive success of the Internet. It is used today by developers and businesses globally, with more than 14000 developers publishing their Open Source components on CPAN.

CPAN Security Group

The CPAN Security Group (CPANSec) is a newly formed group stemming from the Perl Toolchain community. One of its goals is to attempt to facilitate the resolution of security issues with CPAN modules. Depending on whether the maintainer is active or not, this can be a simple matter of reaching out to a maintainer. In other cases, it may take considerable time to either contact the maintainer or work with Pause to grant COMAINT to another maintainer.

Regardless, the goal is to have vulnerabilities resolved quickly. To that end, the CPANSec is attempting to increase its profile so that reporters of security vulnerabilities are able to reach someone who can help, even if the maintainer is not responsive.

CPANSec can be found at https://security.metacpan.org/.

CPAN Module Maintainers

FIRSTCOME

Perl follows a “first-come” process for assigning ownership of a module. The first person to upload the named module is granted FIRSTCOME permissions. That person is able to release new versions or transfer permissions to another CPAN author or grant co-maintenance permissions (COMAINT) to one or more CPAN authors. Only the FIRSTCOME permission allows an author to transfer ownership or grant permissions to a new co-maintainer, though the PAUSE admins can also grant COMAINT if it is deemed appropriate.

COMAINT

The COMAINT permission allows a CPAN author to issue a release of the module.

Absent/Unresponsive Maintainers

As with many Open Source projects, maintainers can come and go over time. Just because a new version of the module has not been released in some time it does not mean the maintainer is absent. Some modules are “functionally complete” and unless something changes there may be no need for a new version to be released.

Absent maintainers however can sometimes be determined by looking at the release history of modules that they have released. If the maintainer has not released any new or updated modules in several years, they may be absent.

CPAN signals absent maintainers by using the special users NEEDHELP, HANDOFF and ADOPTME, as documented in the PAUSE Operating Model, https://pause.perl.org/pause/query?ACTION=pause_operating_model.

In the case of both Spreadsheet::ParseExcel and Spreadsheet::ParseXLSX the maintainers who released the last version appear to have been absent and had not signaled that they needed help or that the modules were up for adoption.

NEEDHELP

Assigning COMAINT permissions to the special CPAN user NEEDHELP says that the owner is happy to give co-maint to anyone interested in helping with the module, but plans to retain ownership.

HANDOFF

Assigning COMAINT to the special CPAN user HANDOFF is a way for the current owner of a module to flag that they’re happy for someone else to take over ownership of the module. One still needs to ask the owner to adopt the module.

ADOPTME

Assigning COMAINT permission to the ADOPTME user flags that a module is open to takeover. If the owner is ADOPTME, it can also indicate a deceased author. ADOPTME as co-maintiner can indicate a non-responsive author, or an author who has explicitly added ADOPTME.

Install Latex on Linux (Mint)

Perl on Medium

Published by Hyperion on Monday 05 February 2024 17:21

In the realm of document creation, where precision meets artistic expression, LaTeX stands tall as the go-to typesetting system. If you…

なぜ私たちがYAPC::Hiroshima 2024にスポンサーするのか

Perl on Medium

Published by Kitano Katsuhisa on Friday 02 February 2024 00:05