Ваш hwaddr является просто большим количеством, таким образом, Вы могли всегда просто брать ту модификацию вообще, Ваш диапазон, и добавьте смещение.
#!/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);
Вот Математика:: версия 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);