A little nicer way to use smartmatch on perl 5.18


Of course as Perl developers we all love new features, don't we?

So the moment we could work with perl 5.10 we all started using smartmatch, right? If not for the only reason it allows us to write elegant code like this:

use v5.10.1;
@array = qw ( Thom Jonny Colin Ed Phil );
say "I found Phil!" if 'Phil' ~~ @array;

But now we have perl 5.18 and some of the ideas of smartmatch turned out to be a little too smart, and so we now consider it an experimental feature. So even code like this, when executed on a 5.18 perl, gives warnings:

Smartmatch is experimental at smart.pl line 3.
I found Phil!

brian d foy wrote about how to stop these warnings, but it's not pretty:

no warnings 'experimental::smartmatch';

This works under perl 5.18 but gives nasty error messages under older perls:

Unknown warnings category 'experimental::smartmatch' at smart.pl line 3.
BEGIN failed--compilation aborted at smart.pl line 3.

so the 'best' way to do it is like below:

no if $] >= 5.017011, warnings => 'experimental::smartmatch';

Ugly, right? That is why Leon Timmermans created experimental, a CPAN module that allows you to simply write:

use experimental 'smartmatch';

That's much better! I can remember that, and it's readable. I hope you like it as much as I do!

Of course this does not alleviate the problem that smartmatch is now considered experimental, which means that its implementation is probably going to change in upcoming perls.

POP3 with TLS in Perl

The famous libnet modules provide Perl programmers with a low level interface to POP3 and SMTP servers, among others.

This works fine in general but over the past years most mail servers stopped offering 'plain' SMTP and POP3 access, but use either SSL or TLS encryption. This has lead to a plethora of modules on CPAN to support SMTP via SSL or TLS and also for POP3 via SSL. Until recently this was not the case for POP3 using TLS security. But earlier this week Steffen Ullrich, the maintainer of IO::Socket::SSL, released a new version of Net::SSLGlue that also allows for connecting to POP3 over TLS. And as opposed to many of the other modules, it also allows to verify the SSL certificate on the remote server for extra security. Net::SSLGlue works for Net::SMTP, Net::POP3, Net::LDAP, and LWP.

Here is an example of how you can connect to a POP3 mail server over TLS:

On Unicode and Sorting

Tom Christiansen published an article on Perl.com on the topic of sorting and unicode.

It's good and it explains a little bit about why Unicode is so difficult and why sorting Unicode (or even ascii) is even more difficult, mainly because it depends on your local definitions what results you expect from a sorting operation.

It might be nice to point out that the modules he proposes on using, Unicode::Collate, and ="https:/…