II São Paulo Perl Workshop
Olha, não conheço sequer uma criatura digna de ser chamada Programador Perl que esteja dentro dos padrões daquilo que a sociedade considera "normal".
Se Perl mutila a psique humana ou apenas atrai freaks, jamais saberemos. O fato é: somos "foverer alone" e nos vangloriamos disso
Mas, por mais insuportável que será para mim deixar o meu covil, nesse dia 7 de maio ao menos terei uma boa razão para fazê-lo: o II São Paulo Perl Workshop! Esse evento promete, ao menos para mim, muito mais do que o famigerado Google Developer Day, a começar pelo fato de que o local não terá acesso à Internet!!! Ou seja: só vai quem se interessa pelo tema.
E, falando em coisas interessantes, o próprio Larry Wall, o criador do Perl, dará palestra! Se eu tivesse uma cópia de "Deus, um Delírio" [Richard Dawkins] em papel, garanto que pediria um autógrafo na contracapa.
Enfim, esse post não é patrocinado, eu não ganho comissão das inscrições, e, no fundo, quero mais que vocês todos, programadores .NOT, se fsck-odam. Para quem fica, a minha; para quem vai, a do meu pai!
UTF-8: A Missão

Me recuso a entender como ainda existem uébidevélopers que não conseguem decidir se usam codificação ISO-8859-1 ou UTF-8 em suas bagaças, e acabam optando por ambas. Para piorar, os países que tem a capacidade de definir normas consistentes já o fizeram há décadas, e hoje podem sobreviver muito bem sem fugir do ASCII
Já quem lê (e escreve) em cirílico ou português, que se vire. Inclusive, quem escreve hoje em dia raramente pensa em quem vai ler. Então, você, que por razões de ofício ou não, precisa processar computacionalmente uma quantidade exorbitante de texto heterogêneo na língua de Camões, está fo-di-do.
Felizmente, pensou "processamento de textos", pensou Perl! Entretanto, por melhor que seja a ferramenta, não resolve o problema sozinha. Então, tentando fazer do mundo um lugar melhor, fiz uma miscelânea da minha experiência de dar cabeçada na parede. Have a phun:
regex extratora de URLs
Acabei precisando de um filtro que separe (especificamente, remova) as URLs de um arquivo de texto qualquer. Imaginei que, sendo esta uma tarefa bastante recorrente na programação para Web (por exemplo, para linkar automaticamente todas as URLs do texto), existiria uma solução comum e padronizada em forma de regular expression.
Ledo engano! As implementações que encontrei eram ou ridículas de simples (e não pegavam nem metade das minhas URLs), ou então absurdamente complexas (e incompatíveis com o meu caso e/ou lentas). OK, o jeito, para PHP, foi esse:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | if ($fh = @fopen($argv[1], 'r')) { while (!feof($fh)) { preg_match_all( '% ( (ftp|https?):\/\/ ([a-z0-9\-_]+(:[^@]+)?\@)? ( ([a-z0-9\.\-]+)\.([a-z\.]{2,6}) | ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) ) (:[0-9]{2,5})? ( [a-z0-9\.\-_/\+\%&;\:,\=\!@\(\)\[\]~\'\"]* [a-z0-9\.\-_/\+\%&;\:,\=\!@\(\)\[\]~]+ ) (\?[a-z0-9\.\-_/\+\%&;\:,\=\!@\(\)\[\]~]*)? (\#[a-z0-9\.\-_/\+\%&;\:,\=\!@\(\)\[\]~]*)? ) %ix', fgets($fh), $urls, PREG_PATTERN_ORDER ); foreach ($urls[0] as $url) echo "$url\n"; } fclose($fh); } |
O que isso faz é pegar qualquer um arquivo de texto passado como parâmetro, processar ele, extrair as URLs e imprimi-las. E qual o diferencial?
- Testei com umas 4 mil URLs do meu del.icio.us e mais 12 mil do meu histórico do Firefox, e funcionou satisfatoriamente;
- Testei com o dump do Wikipédia, e a velocidade de processamento foi de 3.85 MB/s;
- Do jeito que está, a regex não usa nenhum dialeto estapafúrdio, e é perfeitamente compatível com PHP e Perl. Mas portar para, digamos, JavaScript deve ser dois palitos (juntar tudo numa linha só, presumo).
É isso aí. Se lhe serviu para alguma coisa, poste nos comments

