Perl version number puzzles

Reading time: 2 minutes

I’m working on a longer article about version numbers in Perl, why there are now so many ways to screw them up, and some recommendations.  In the meantime, I realized that some of my examples for that article might be a fun puzzle for others with some curiosity and time to kill.

Format 🔗︎

Each puzzle consists of the output of several Perl one-liners using different versions of Perl.  They are run in a directory with a single file, Foo.pm, like this:

package Foo;
use strict;
use warnings;
our $VERSION = 1.23;
1;

In each puzzle, line 4 (the $VERSION line) is different and the puzzle is to figure out the $VERSION line given only the sample output.

Puzzle 1 🔗︎

$ perl5.10.0 -e 'use Foo 0.001001'

$ perl5.8.9 -e 'use Foo 0.001001'
Foo version 0.001001 required--this is only version 0.001001 at -e line 1.
BEGIN failed--compilation aborted at -e line 1.

$ perl5.8.9 -Mversion -e 'use Foo 0.001001'

Puzzle 2 🔗︎

N.B. This puzzle intentionally requests a higher version number than is in Foo.

$ perl5.10.0 -e 'use Foo v0.1_1'
Foo version v0.1_1 required--this is only version v0.0_1 at -e line 1.
BEGIN failed--compilation aborted at -e line 1.

$ perl5.8.0 -e 'use Foo v0.1_1'
Foo version v0.1.1 required--this is only version v0.0.1  at -e line 1.
BEGIN failed--compilation aborted at -e line 1.

$ perl5.6.2 -e 'use Foo v0.1_1'
Foo version 0.011 required--this is only version 0  at -e line 1.
BEGIN failed--compilation aborted at -e line 1.

Puzzle 3 🔗︎

$ perl5.10.0 -e 'use Foo 0.000001'
Foo version 0.000001 required--this is only version v0.0_1 at -e line 1.
BEGIN failed--compilation aborted at -e line 1.

$ perl5.10.0 -e 'use Foo v0.0_1'

$ perl5.8.9 -e 'use Foo v0.0_1'

$ perl5.8.0 -e 'use Foo v0.0_1'
Foo version v0.0.1 required--this is only version v0.0_1  at -e line 1.
BEGIN failed--compilation aborted at -e line 1.

$ perl5.6.2 -e 'use Foo v0.0_1'
Foo version 0.001 required--this is only version v0.0_1  at -e line 1.
BEGIN failed--compilation aborted at -e line 1.

Puzzle 4 🔗︎

$ perl5.10.0 -e 'use Foo v0.1.1'

$ perl5.8.9 -e 'use Foo v0.1.1'

$ perl5.10.0 -e 'use Foo v0.2.1'
Foo version v0.2.1 required--this is only version v0.1.1 at -e line 1.
BEGIN failed--compilation aborted at -e line 1.

$ perl5.8.9 -e 'use Foo v0.2.1'
Foo version 0.002001 required--this is only version 0.001001 at -e line 1.
BEGIN failed--compilation aborted at -e line 1.

•      •      •

If you enjoyed this or have feedback, please let me know by or