Hallo Kuerbis,
Dein Code scheint soweit zu funktionieren.
Ich habe mal diese Regex für diesen Zweck gefunden (weiß nicht mehr wo; sie findet sich vielerorts im Netz):
$number =~ s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1$separator/g;
Damit ließe sich Dein Code wohl etwas straffen (ohne
$n1 und
$n2).
Grüße
Holger
PS: Ansonsten hatte pq ja schon in
msg #18982 empfohlen,
Number::Format zu benutzen. Das kenne ich selbst zwar noch nicht, aber ich hätte es auf jeden Fall aufgrund dieser Empfehlung ausprobiert, bzw. gedenke es beim nächsten Anwendungsfall zu tun.