tilly,
For the record,
Roy Johnson was the first to produce working code. Unfortunately it was broken during some refactoring. The code that I validated originally was:
sub nearest {
my $num = shift;
my $firstlen = int(length($num)/2 + .5);
my $first = substr($num, 0, $firstlen);
my $back = reverse($first);
substr($back, 0, 1, '') if $firstlen > length($num)/2;
# Update (again): if higher, check lower and vice-versa:
my $one = $first . $back;
$first += $one < $num ? 1 : -1;
$back = reverse($first);
substr($back, 0, 1, '') if $firstlen > length($num)/2;
my $two = $first . $back;
return abs( $one - $num ) < abs( $two - $num) ? $one : $two;
}