[SP-pm] Remover 0x0D (aka carriage return) do final de uma linha

Luis Motta Campos luismottacampos at yahoo.co.uk
Fri Jul 23 03:54:02 PDT 2010


On 07/22/2010 04:11 PM, Otavio Pereira wrote:
> Aproveitando o e-mail porquê
> 
>     $x =~ s/0x0d//g;
> 
> não funciona?
> 
> Alguma sugestão?

Sugiro que você RTFM(*) "perlre", onde se explica como usar notação
hexadecimal em expressões regulares.

A minha implementação da sua expressão seria mais como

s{\x0D}{}g

Ou a ainda mais legível

s{\r}{}g

O que você está fazendo de errado é negando que você tem um problema de
arquitetura nos seus programas: você lê e processa arquivos com duas
codificações diferentes (linhas terminadas com "\r\n" ou "\n" -- padrão
"Windows" ou "unix"), mas não faz nada explícito para detectar o padrão
e se comportar de acordo no seu programa. Você poderia começar assumindo
que todas as linhas que você ler de um mesmo arquivo vão estar no mesmo
formato, e partir daí.

Eu recomendo construir um Iterador flexível o bastante para repetir o
padrão para todas as linhas do arquivo, baseado em Iterator::IO::ifile,
e transformar isso numa biblioteca que você pode até subir para o CPAN.

Putamplexos
-- 
Luis Motta Campos is a DBA,
Perl Programmer, foodie and photographer.

(*) Querendo dizer "Read The FRIENDLY Manuals"


More information about the SaoPaulo-pm mailing list