Bueno aunque se vea fácil es muy complicado cuando intentas crear una expresión regular para validar o capturar cualquier texto, en este caso es un texto fijo y lo pude hacer.
#!/usr/bin/perl
$text = 'hola 3455345 sdfsdf 345435,3454 sdfsdf j ksjdh skdjfh 1.233.555,34534 asdasd as 344.34 qweqwe 23,324.324 qweqwe -234324324';
while($text =~ m/(?:\s)([\d\.]+\,\d+(?=\s)|\d+\,\d+(?=\s)|\d+(?=\s)|\-\d+)/g)
{
}
Salida:
3455345
345435,3454
1.233.555,34534
-234324324
La regexp que creaste no filtra correctamente, debes tratar de crear una regexp mas estricta de modo que si x parte no cumple con x condición, la regexp se pare y no devuelva ninguna referencia. Trata de hacer una Regexp que devuelva una sola Referencia mejor y no 3.
Se podría hacer fácilmente una regexp que valide cualquier texto, a mi se me ocurriría dividir primero el texto y luego validarlo pero es mejor hacerlo todo en una sola Regexp y que devuelva una sola referencia xD. Mas tarde miro como me hago para crear una sola regexp o que alguno muestre su regexp para validar cualquier texto xD.