Grep в Perl, кажется, никогда не работает для меня - PullRequest
0 голосов
/ 24 марта 2011

У меня есть простой скрипт, который читает и выводит список файлов из каталога.Но я не хочу перечислять скрытые файлы, файлы с «.» Впереди.

Так что я попытался использовать функцию grep , но ничего не возвращает.У меня нет списка файлов.

opendir(Dir, $mydir);
while ($file = readdir(Dir)){
$file = grep  !/^\./  ,readdir Dir;
 print "$file\n";

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

Ответы [ 5 ]

4 голосов
/ 24 марта 2011

Вы можете перебирать записи каталога, используя цикл, или читать все записи в каталоге одновременно:

while (my $file = readdir(Dir)) {
    print "$file\n" if $file !~ /^\./;
}

или

my @files = grep { !/^\./  } readdir Dir;

См. perldoc -f readdir.

3 голосов
/ 24 марта 2011

Вы вызываете readdir () дважды в цикле.Не.

1 голос
/ 24 марта 2011

Используйте glob:

my @files = glob( "$mydir/*" );
print "@files\n";

Подробнее см. perldoc -f glob.

1 голос
/ 24 марта 2011

или примерно так:

#!/usr/bin/env perl -w
use strict;

opendir my $dh, '.';
print map {$_."\n"} grep {!/^\./} readdir($dh);
0 голосов
/ 24 марта 2011
while ($file = readdir(Dir))
{
    print "\n$file" if ( grep !/^\./, $file );
}

ИЛИ вы можете использовать регулярное выражение:

while ($file = readdir(Dir))
{
    print "\n$file" unless ( $file =~ /^\./ );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...