use strict;
my %ipaddr = (
a => '192.168.0.1',
b => '192.168.0.3',
c => '192.168.0.200',
d => '192.168.2.1',
e => '192.168.100.1',
f => '192.168.1.1',
);
# The old method:
# my @sortedKeys = sort {$ipaddr{$a} cmp $ipaddr{$b}} keys %ipaddr;
my @sortedKeys = map {$_->[0]}
sort {$a->[1] cmp $b->[1]}
map {[$_, join '.', map {sprintf "%03d", $_} split '\.', $ipaddr{$_}]}
keys %ipaddr;
print "$ipaddr{$_}\t$_\n" for @sortedKeys;
####
192.168.0.1 a
192.168.0.3 b
192.168.0.200 c
192.168.1.1 f
192.168.2.1 d
192.168.100.1 e
####
192.168.0.1 a
192.168.0.200 c
192.168.0.3 b
192.168.1.1 f
192.168.100.1 e
192.168.2.1 d