[Cascavel-pm] problema em match de arquivos

Breno G. de Oliveira breno em clavis.com.br
Terça Junho 13 08:22:00 PDT 2006


Oi Alceu,

Alceu R. de Freitas Jr. wrote:
> 
> Use o módulo Config para identificar automaticamente o
> separador de diretórios. Assim seu código vira
> multiplaforma.
> 

O problema é que quem escreve os arquivos a serem ignorados e a serem
incluídos é o usuário, e ele coloca os separadores de acordo com seu
sistema operacional. Na verdade o código que eu mandei é só uma espécie
de PoC que reproduz o erro que estou tendo em uma aplicação maior, que
trata os separadores corretamente. O problema é que está ignorando
arquivos com sucesso no Linux (onde o separador é '/'), mas não no
Windows (onde o separador é '\\').

> 
> Esses seus arquivos estão usando Unicode? Usar unicode
> com Perl é meio chato (eu tentei um tempo depois
> deixei pra lá).
> 

Até onde eu sei, não estão não... Não uso nenhum módulo de Unicode e
trato tudo como texto puro. Aliás, não sei nem como se usa Unicode no
Windows... Se ajuda, é uma instalação "vanilla" do Windows XP, em
inglês, e tudo que fiz foi escolher:

Novo->Novo Documento de Texto (*.txt)

cliquei duas vezes, abri o bloco de notas, escrevi "\pagefile.sys",
salvei, saí. Fiz o mesmo para o que contém a lista de arquivos,
colocando "\*" no conteúdo. Note que os prints exibem os valores
"corretos" do conteúdo, e o glob() expande corretamente também.

> Tente fazer comparação de strings usando eq ao invés
> de expressões regulares: assumindo que a lista de
> arquivos recuperada via glob não inseriu quebras de
> linha ou outras coisas, você consegue fazer essa
> comparação de forma máis rápida (e talvez resolva seu
> problema).
> 

Não posso, preciso prever o caso em que o sujeito ignora um diretório
enquanto estou listando os subdiretórios. Por exemplo, se eu colocar no
arquivo de ignorados:

\windows

ele deve ignorar o "\windows", "\windows\system32", etc...

Por isso coloquei a expressão regular com o ^ no início, e por isso não
posso usar o "eq" (a menos que exista um meio de pular um diretório no
File::Find e eu não tenha RTFM corretamente ;)

A moral da história é que quero contornar o problema apenas em último
caso. A idéia é aprender pq isso está acontecendo e como evitar que
aconteça (a menos que seja o comportamento esperado do Perl - aí eu
contorno ;)


[]s

breno


Mais detalhes sobre a lista de discussão Cascavel-pm