RFC: new API for Type::Params

Firstly, I'm not planning on breaking compatibility with Type::Params. The new API would live under a different namespace, such as Type::Params2.

The API for Type::Params is currently:

Please relicense from "Perl 5" to MIT or Apache 2.0 license

Following from my previous post, I am now actively encouraging everyone to switch licenses to MIT/ISC license or Apache 2.0.

My reasoning is that in the vast majority of cases the author and contributors want the software to be used by as many businesses and hobbyists as possible.

Previously I described how the burden of understanding and complying with licenses, including open source licenses, can be an unintended barrier to them using the software.

Perl modules tend to use "Perl 5" combination as the default license i.e. "Licensed under the same terms as Perl itself". And the "Perl 5" license is actually a dual licensing of the problematic Artistic 1.0 license and the dated GPL1.0 license which also has problems. Both are rarely used outside of Perl and in my view present a barrier to adoption.

Recall I described how permissive ("BSD") and copyleft ("GPL") licenses are functionally identical if no binary is distributed (websites) or for scripted languages that remain in source form.

CPM0 frl-plugin:perlscript: ERROR: 'times' trapped by operation mask at /usr/lib64/perl5/B.pm line 183.

Hello ,
When "use DateTime;" library is included in perl file ,getting the error as

"CPM0 frl-plugin:perlscript: ERROR: 'times' trapped by operation mask at /usr/lib64/perl5/B.pm line 183."

Could someone provide some inputs on the same.
Also to which tag does this opcode 'times' belong to ?
example: fork,wait, waitpid will belong to :subprocess

Regards
Kavya

Perl Weekly Challenge 177: Damm Algorithm and Palindromic Prime Cyclops

These are some answers to the Week 177 of the Perl Weekly Challenge organized by Mohammad S. Anwar.

Spoiler Alert: This weekly challenge deadline is due in a few of days from now (on Aug. 14, 2022 at 23:59). This blog post offers some solutions to this challenge, please don’t read on if you intend to complete the challenge on your own.

Task 1: Damm Algorithm

You are given a positive number, $n.

Write a script to validate the given number against the included check digit.

Please checkout the wikipedia page for information.

Example 1

Input: $n = 5724
Output: 1 as it is valid number

Example 2

Input: $n = 5727
Output: 0 as it is invalid number

The algorithm is a check digit algorithm named after H. Michael Damm, who presented it in 2004.

Match Anything, Quickly

Sometimes I want to filter a set of strings, but the details of the filter are not known beforehand. In particular, I may want a null filter, which simply accepts anything.

This looks like a job for a regular expression, but I can think of at least two implementations. One is to pass around regular expression objects. The second is to wrap a match (m//) in a subroutine reference, and pass that around. Given the use of regular expressions, there are a number of possibilities for a regular expression that matches any string.

I wondered whether one of the alternatives I was choosing among was faster than another, so I decided to Benchmark them. Both implementations applied the regular expression to a global variable. In practice this would probably be a localized $_, but my read of the Benchmark module says that it also localizes $_, but leaves it undef.

SPVM continues to undergo heavy changes.

Sorry, SPVM continues to undergo heavy changes.

After building real-world modules and applications, I realized that a lot of changes needed to be made.

You can see what I'm currently working on below.

SPVM modules - CPAN modules

JSON - JSON

Math - Math functions

Regex - Regular Expression

Unicode - Unicode Utilities

Base64 - Base 64

Time::Local - Time Reverse Manipulation

SPVM::Errno - Error Number

SPVM::Resource::Re2::V2022_06_01 - Resource of Google RE2 release 2022-06-01.

SPVM::Resource::Zlib::V1_2_11 - zlib v1.2.11 Resource

SPVM::Cwd - get pathname of current working directory

SPVM::IO - File IO, Socket, Select/Polling.

SPVM::Digest::MD5 - SPVM interface to the MD5 Algorithm

SPVM::Digest::SHA - SPVM extension for SHA-1/224/256/384/512

Integrated Inconsistencies.

I will get it wrong. I will start off by saying that, not just because I am married and this sentiment has been conjugally programmed in me for years, but because doing things "my way" will not suit everybody. We approach life, programming, drawing from different perspectives, different analogies, and one method however disagreeable to one person, may be perfectly logical to another. Even our own actions and analysis show conflicts. Take a cup of tea. I drink from the top of the cup, but measure from the bottom. Take character position in programming code...we measure lines from the top, then character on that line. But when we write, we write one line at a time, populating columns in a line before going to the next line.

# Perl Weekly Challenge 176: Permuted Multiples and Reversible Numbers

These are some answers to the Week 176 of the Perl Weekly Challenge organized by Mohammad S. Anwar.

Spoiler Alert: This weekly challenge deadline is due in a few of days from now (on Aug. 7, 2022 at 23:59). This blog post offers some solutions to this challenge, please don’t read on if you intend to complete the challenge on your own.

Task 1: Permuted Multiples

Write a script to find the smallest positive integer x such that x, 2x, 3x, 4x, 5x and 6x are permuted multiples of each other.

For example, the integers 125874 and 251748 are permuted multiples of each other as

251784 = 2 x 125874

and also both have the same digits but in different order.

Output

142857

Numeric Variable Names With Leading Zeroes

Over on the p5p mailing list, a user raised the issue that use of variable $00 is an error starting with Perl 5.32, and asked that this "regression" be fixed.

I have always understood that variables whose names begin with anything but an alphabetic or an underscore are reserved to Perl, and you mess with them at your peril. And this is the gist of the Porters' response to the post. Recent versions of perlvar say this explicitly, though earlier versions of that document restrict themselves to describing currently-implemented special variables.

For what it's worth, perl532delta appears not to mention this as a new diagnostic.

I wondered how much of this kind of thing was in CPAN, so I whipped up a Perl::Critic policy to try to find them: Variables::ProhibitNumericNamesWithLeadingZero. I then ran this against CPAN as it stood July 23 2022.

The Perl Advent Calendar 2022 Call for Papers is Now Open

In the year 2000, the world was a different place. Y2K was still fresh in our memories, many of us had just partied like it was 1999 and Mark Fowler had given up eating chocolate.

Read the full article.

Climbing the Charts (request for feature requests)

Hurray, released another version of Chart without new features. Actually rewrote the complete documentation and I guess especially this page (with a little help of this list) is all what most people need. That also allowed us to drop the old PDF and HTML docs which took 8/9 of the distributions space (good side effect).

But main reason to tell this: writing the docs forced me to plough through most of code and also test most of it with self written or at least adapted code, which brought me into the position actually understand what I maintain.

So now I can give actually intelligent responses to feature requests. So please post them here or there. And yes , there will be SVG support, but not soon.

Ideas from TPRC2022: Bug/Task/Issue independent interface and a cli tool

We have a Database Independent Interface aka DBI and a Unified Cache Handling Interface aka CHI which both provide a generalized interface to similar backend services. Similarly we have AnyEvent - the DBI of event loop programming and Log::Any. With the Nopaste cli provides an agnostic tool to send data to pastebin like services.

So why not a generalized interface to Bug, Task, and Issue trackers? And an accompanying cli tool?

Jira is obviously very common for organizations to use, Github issues are ubiquitous, Bugzilla is still around, Request Tracker has a strong following, not to mention Zendesk, OTRS, and so many others you're forced to use each day for your work. Likely your organization or employer uses more than one!

Having a generalized interface makes automation interactions more trivial and vastly more consistent. With this interface established, an accompanying command line tool becomes a logical addition. And if you aren't yet automating interactions with your Bug / Task / Issue tracker, then having an interface is even more important to getting you started.

Such an interface would be the majority of whats needed for a unified interface and cli tool and to interact with CPAN modules bugs/issues regardless if they are on Github, RT, or other. Something similar to Debian's reportbug command.

The CPAN Testers game

I'm not sure of how many of you know the ecosystem of Perl QA, so I decided to move an old article of mine to medium.com and update it to reflect all the changes that happened between those years.

Here is the link to the old-new article.

I also made several changes to the project cpan-openbsd-smoker and would like to share with the community the details about it, specially with the people that not only publishes modules to CPAN, but also those are part (or want to be part of) the QA group.

The CPAN OpenBSD Smoker project

This project basically applies a lot of documented steps scattered around and produces an local VM running OpenBSD with a running CPAN Smoker in an automated fashion.

In the first versions, much of the automation was implemented with Bash scripts. Later, I started introducing Perl code to replace the scripts that become more complex. Then I added parallel to the mix and things started getting really complicated.

TOTP with Perl and Authen::OATH

I wrote this post after seeing Flavio Poletti's blog post entitled OATH Toolkit. I have been a fan of time-based one time passwords (TOTP) for many years. In fact, I used Mobile-OTP in commercial applications for several years before the Initiative for Open Authentication (OATH) and OATH/TOTP were codified in RFC6238.

Now-a-days, OATH/TOTP is the best choice for time-based one time passwords, and has been for at least a decade.

Introduction

I have implemented OATH/TOTP many times in my career, and in several programming languages, including Perl. One of those Perl implementations is within the open source program kpcli.

Using Authen::OATH for TOTP

Using Authen::OATH for TOTP is straightforward. The kpcli code appears a little overly complex because it optionally demand-loads the Authen::OATH module and has support for digest ciphers other than SHA1. This is kpcli's get_totp() subroutine:

ERROR: 'flock' trapped by operation mask at /usr/lib64/perl5/vendor_perl/Storable.pm

Hello All,
Facing flock error when trying to execute the Automated unit testing .

705:041754.467 CPM0 frl-plugin:perlscript: ERROR: 'flock' trapped by operation mask at /usr/lib64/perl5/vendor_perl/Storable.pm line 268.
Compilation failed in require at /usr/share/perl5/vendor_perl/Const/Fast.pm line 15.
Compilation failed in require.
BEGIN failed--compilation aborted.

Could anyone please help on the issue

German Perl/Raku Workshop recordings are online

During the last days, we reviewed and cut the video recordings. The recordings
are now available on the media platform of the CCC:

https://media.ccc.de/c/gpw2022

Some of the presentations are not yet published - we need to work on
the video some more..

Again, thanks to our speakers, our sponsors and everybody else for the
great conference. Next year we'll hopefully meet again in 2023 in Frankfurt am Main in person!

Introduction Test::Excel

Test::Excel now supports regex, for more information, please follow the link.

https://theweeklychallenge.org/blog/test-excel

Mite: an OO compiler for Perl

Moose is great, but it does introduce a slight performance hit to your code. In the more than 15 years since it was first released, hardware improvements have made this less of a problem than it once was. Even so, if performance is a concern for your project, Moose might not be what you want. It also has a fairly big collection of non-core dependencies.

Moo is a lighter weight version, minus with meta-object protocol, but supporting nearly all of Moose's other features. It loads faster, sometimes runs faster, and has fewer dependencies. (And most of the dependencies it does have are just modules which used to be part of Moo but were split out into separate distributions.)

But what if you could have fast Moose-like object-oriented code without the dependencies?

In 2013, Michael Schwern started work on Mite to do just that. It was abandoned in 2014, but I've taken it over and expanded the feature set to roughly equivalent to Moo.

Mite is an object-oriented programming compiler for Perl. It allows you to write familiar Moose-like object-oriented code, then compile that into plain Perl with zero non-core dependencies. Your compiled code does not even have a dependency on Mite itself!

We have a new Perl Steering Council for 2022/23

Following the release of 5.36.0, we have a new Perl Steering Council (PSC). The PSC for the next year comprises Ricardo Signes (RJBS), Paul Evans (PEVANS), and Philippe Bruhat (BOOK). These three will serve until 5.38.0 is released, at which point the next PSC will be elected.

MooseX::Extended Tutorial

There's been a lot of work on MooseX::Extended and now it comes with a fairly extensive tutorial.

The basics are pretty easy to learn, but it gives you a good amount of power. It also allows you to easily define custom versions so you can just slap use My::Custom::Moose; (or role) at the top or your code and it works just fine.

You can now disable just about any features in it you don't want. You can also include experimental features, such as multimethods (based on number of args) and async/await.

Check out the github repo if you'd like to contribute.

About blogs.perl.org

blogs.perl.org is a common blogging platform for the Perl community. Written in Perl with a graphic design donated by Six Apart, Ltd.