Como posso obter uma listagem a partir do DOS em Perl?
-
19-09-2019 - |
Pergunta
Eu preciso para obter nomes de diretório do caminho passado para o script Perl como argumento tempo de execução. Aqui está o código que estou usando:
$command ="cd $ARGV[0]";
system($command);
$command="dir /ad /b";
system($command);
@files=`$command`;
Mas ainda retorna os nomes de diretório dentro do diretório a partir do qual eu estou correndo este script Perl. Em suma, como faço para obter os nomes de diretório a partir de um diretório de destino cujo caminho é passado para este script Perl?
Solução
Isso também deve funcionar
$command = "dir /ad /b $ARGV[0]" ;
Outras dicas
a julgar o que você está tentando fazer em seu post questão
$dir = $ARGV[0];
chdir($dir);
while(<*>){
chomp;
# check for directory;
if ( -d $_ ) {
print "$_\n" ;
}
}
na linha de comando
c:\test> perl myscript.pl c:\test
Existem outros métodos de fazer uma listagem de diretório. Veja estes de documentação
-
perldoc perlfunc
(olhada operadores para testar arquivos.-x
,-d
,-f
etc)
Seu problema é que a execução de "cd" via "sistema" não muda o diretório de trabalho do processo de perl. Para fazer isso, use a função "chdir":
chdir($ARGV[0]);
$command="dir /ad /b";
system($command);
@files=`$command`;
File :: DosGlob (core desde antes perl v5.5) para gotchas evitar como pular arquivos correspondentes /^\./.
perl -MFile::DosGlob=glob -lwe "chdir 'test_dir'; print for grep {-d} <*>"