[Cascavel-pm] Dúvida iniciante listar subdiretórios

Eden Cardim edencardim em gmail.com
Sexta Setembro 12 06:48:41 PDT 2008


2008/9/12 gilmar <gilmarmoretto.mp em gmail.com>:
>   Um bom dia a todos.
>   Estou começando a aperender perl aos poucos e a mais ou menos, um mes e
> por isso o meu problema pode ser até banal mas empaquei nele e não consigo
> sair.
>   Somente para treinar, comecei a fazer um script que possa listar todos os
> diretórios e subdiretórios o qual consegui com uma certa facilidade. Mas
> comecei a ver que seria um pouquinho mais complicado quando tivesse que
> listar muitos níveis de subdiretórios, então pesquisando eu ví que a solução
> poderia ser uma função que chamasse a sí mesma , listasse os subdirtórios e
> entrasse dentro de cada um a procura de outros subdiretórios até achar
> todos.
>   O problema é que eu não consigo fazer isso e faz alguns dias que não
> consigo nenhum avanço. Por isso estou colocando-o para que pudessem dar uma
> olhada e me dar uma luz no que estou fazendo de errado.

Muito bem, você acertou no projeto, porém tem um detalhe: uma função
recursiva precisa, necessariamente, de argumentos para ser útil. Sua
função precisa receber um argumento indicando qual diretório você quer
listar, dessa listagem você pega os diretórios e invoca a função
novamente, passando cada um dos diretórios por vez, algo assim:

sub listar_diretorio {
  my $dir = shift;
  for my $arq (glob("$dir/*")) {
    # ...
    listar_diretorio($arq) if -d $arq;
  }
}

listar_diretorio($inicial);

no CPAN tem vários módulos que fazem isso (File::Next, Path::Class),
sugiro a leitura dos fontes, será bastante instrutivo.

-- 
edenc.vox.com


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