perlmeditation
xdg
<p><i>(I <a href="http://www.dagolden.com/index.php/204/perl-version-number-puzzles/">posted this on my blog</a> to keep up with my Iron Man quota, but since I got no comments there, I decided to re-post it here where I know people enjoy a good Perl puzzle.)</i></p>
<p>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.</p>
<p><b>Format</b></p>
<p>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, <strong>Foo.pm,</strong> like this:</p>
<code>
package Foo;
use strict;
use warnings;
our $VERSION = 1.23;
1;
</code>
<p>In each puzzle, line 4 (the <c>$VERSION</c> line) is different and the
puzzle is to figure out the <c>$VERSION</c> line given only the sample output.</p>
<p><b>Puzzle 1</b></p>
<code>
$ 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'
</code>
<p><b>Puzzle 2</b></p>
<p><em>N.B. This puzzle intentionally requests a higher version number than
is in Foo.</em></p>
<code>
$ 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.
</code>
<p><b>Puzzle 3</b></p>
<code>
$ 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.
</code>
<p><b>Puzzle 4</b></p>
<code>
$ 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.
</code>
<div class="pmsig"><div class="pmsig-268515">
<p>-xdg</p>
<p><small><i>Code written by xdg and posted on PerlMonks is [http://creativecommons.org/licenses/publicdomain|public domain]. It is provided <b>as is</b> with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.</i></small></p>
</div></div>