O seu hwaddr é apenas um grande número, então você pode sempre usar esse mod independentemente do seu range e adicionar o offset.
#!/usr/bin/perl
$iface = $ARGV[0] || "eth0";
open(IFCONFIG, "-|") || exec "/sbin/ifconfig", $iface;
while (<IFCONFIG>) {
if (/HWaddr ([0-9a-f:]{17})/i) {
($hwaddr = $1) =~ s/://g;
$hwint = hex($hwaddr);
print $hwint % 30000 + 30000, "\n";
}
}
close(IFCONFIG);
Aqui está a versão Math :: BigInt:
#!/usr/bin/perl -w
use Math::BigInt;
$iface = $ARGV[0] || "eth0";
open(IFCONFIG, "-|") || exec "/sbin/ifconfig", $iface;
while (<IFCONFIG>) {
if (/HWaddr ([0-9a-f:]{17})/i) {
($hwaddr = $1) =~ s/://g;
$hwint = Math::BigInt->new("0x" . $hwaddr);
print $hwint % 30000 + 30000, "\n";
}
}
close(IFCONFIG);