[Cascavel-pm] Melhorar a leitura de números grandes.
Eden Cardim
edencardim em gmail.com
Terça Julho 3 20:04:21 PDT 2007
On 7/3/07, "Iberê O. Kuntz de Souza" <kuntzzz em gmail.com> wrote:
> > $cnumber =~ s/(\d)(?=(?:\d{3})+$)/\1./g;
> Poderia dar uma comentada? =)
hehe, esse é um daqueles casos onde pouco código fala muito. Vamos lá,
suponha que $cnumber = 1127836, vejamos o que acontece na primeira
substituição:
- (\d) casa com '1'
- (?:\d{3})+ casa com '127836' -- uma ou mais sequências de 3 dígitos,
esse agrupamento sem captura precisa estar dentro de um positive
look-ahead assertion para que a string que casar com ele não seja
considerada na hora de realizar a substituição. Além disso, o
agrupamento está ancorado no final da string ('$') para garantir que o
ponto irá ser inserido a 3 dígitos do final da string. Sem a âncora,
esse agrupamento casaria com '278' e '783'.
Enfim, um ponto é anexado ao dígito capturado e o processo todo é
repetido no resto da string ('127836') por causa do switch 'g'.
Eventualmente, ocorrerá o casamento com 7836 e o '7' é substituído por
'7.'
Espero ter sido compreensível.
Isso merece golfe em C, ou quem sabe em Perl mesmo.
--
Eden Cardim
Instituto Baiano de Biotecnologia
Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas
Laboratório de Bioinformática
Mais detalhes sobre a lista de discussão Cascavel-pm