sprintf looks like a good solution.
As I am not very familiar with pack I thought I'd try using it in this case, and here is what I got. Note that this code is tested but it is by no means authoritative, feel free to point my mistakes.
#!/usr/bin/perl -w
use strict;
while( <DATA>)
{ chomp;
my( $v1, $expected_res, $v2)= split /\s+/;
my $pv1= pack( 'I3', split( /\./, $v1));
my $pv2= pack( 'I3', split( /\./, $v2));
my $res;
if( $pv1 gt $pv2) { $res= '>'; }
elsif( $pv1 lt $pv2) { $res= '<'; }
elsif( $pv1 eq $pv2) { $res= '='; }
if( $res eq $expected_res) { print "ok $v1 $res $v2\n"; }
else { print "NOK $v1 $res $v2 should be $v
+1 $expected_res $v2\n"; }
}
__DATA__
1.2 < 1.3
1.3 > 1.2
1.2.1 > 1.2
1.2.1 < 1.3
1.2.1 < 1.2.2
1.2.2 > 1.2.1
1.2.10 > 1.2.2
1.2.2 < 1.2.10
1.2 = 1.2
1.2.1 = 1.2.1
1.2.10 = 1.2.10
|