Как я могу получить список каталогов из DOS в Perl? - PullRequest
0 голосов
/ 08 января 2010

Мне нужно получить имена каталогов из пути, переданного в скрипт Perl, в качестве аргумента времени выполнения. Вот код, который я использую:

$command ="cd $ARGV[0]";
system($command);

$command="dir /ad /b";
system($command);
@files=`$command`;

Но он по-прежнему возвращает имена каталогов внутри каталога, из которого я запускаю этот Perl-скрипт. Короче говоря, как мне получить имена каталогов из целевого каталога, путь которого передается в этот скрипт Perl?

Ответы [ 4 ]

9 голосов
/ 08 января 2010

судя по тому, что вы пытаетесь сделать в своем посте с вопросом

$dir = $ARGV[0];
chdir($dir);
while(<*>){
 chomp;
 # check for directory;
 if ( -d $_ ) {
    print "$_\n" ;
 }
}

в командной строке

c:\test> perl myscript.pl c:\test

Существуют и другие способы составления списка каталогов. Смотрите это из документации

  1. perldoc -f opendir, perldoc -f readdir

  2. perldoc perlopentut

  3. perldoc -f glob

  4. perldoc perlfunc (посмотрите на операторов для проверки файлов. -x, -d, -f и т. Д.)

2 голосов
/ 08 января 2010

Это также должно работать
$command = "dir /ad /b $ARGV[0]" ;

2 голосов
/ 08 января 2010

Ваша проблема в том, что запуск "cd" через "system" не меняет рабочий каталог процесса perl Для этого используйте функцию "chdir":

chdir($ARGV[0]);

$command="dir /ad /b";
system($command);
@files=`$command`;
0 голосов
/ 09 января 2010

используйте File :: DosGlob (ядро с версии perl v5.5), чтобы избежать ошибок, таких как пропуск файлов, соответствующих /^\./.

perl -MFile::DosGlob=glob -lwe "chdir 'test_dir'; print for grep {-d} <*>"
...