как получить массив имен файлов, присутствующих в подкаталогах, используя perl (без использования File :: Find) - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь получить имена файлов, присутствующих в подкаталогах.Далее я хочу получить размер массива и искать текст в отдельных файлах

#!/usr/bin/perl

$dir = $ARGV[0];
my @filesList;
opendir(DIR, $dir) || die "Unable to open the directory";
@contents=readdir(DIR);
foreach $listitem ( @contents )
{
    if ( -d $listitem )
    {
        opendir(DIR,$listitem);
        @c1=readdir(DIR);
        foreach  $firstlevel(@c1)  # first level directory structure
        {
            if (-d $firstlevel) {
                opendir(DIR,$firstlevel);
                @c2=readdir(DIR);
                foreach  $secondlevel(@c2) {  #second level directory structure
                    push(@filesList, $secondlevel);
                }
            } else {
                 # push(@filesList, $firstlevel);
            }
        }
        #push(@filesList, $listitem);   
    } else {
        push(@filesList, $listitem);
    }
}
$size = @filesList;
print "array size : $size";
foreach $file(@filesList)
{
    print "$file"; 
}
close(DIR);

Все это я хочу работать без использования Find::Find, я получаю ошибку для use File::Find

Кроме того, как я могу получить размер массива

1 Ответ

0 голосов
/ 22 ноября 2018

scalar - это то, что вам нужно, чтобы получить размер массива, хотя вы можете опустить скаляр и все равно получить количество элементов, как, кажется, у вас уже есть.Вы должны уточнить, что именно вы подразумеваете под «размером массива», если не это.Более чистый способ - использовать File :: Find, но если вы просто хотите что-то быстрое, вы можете выполнить системный вызов для поиска или любую другую системную команду, используя обратные галочки:

use strict;
use warnings;

my @files = `find $ARGV[0] -type f`;
my $size = scalar(@files);
print "Number of files = $size\n";
foreach my $file(@files) {
    print "$file";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...