não consigo localizar FILE / Find.pm em @INC

-1

Como eu disse anteriormente, existe um diretório chamado verilog que é a linguagem HDL usada para descrição do hardware. Dentro deste diretório existem muitos subdiretórios e arquivos .v estão disponíveis. Então eu preciso procurar um padrão chamado clk em todos os arquivos e o diretório com o número da linha exatamente onde está o padrão localizado em cada arquivo e preciso da contagem quantas vezes o clk apareceu. Agora eu poderia passar pelos diretórios e arquivos, mas não consegui obter o número da linha do arquivo onde o padrão ocorreu e a contagem (quantas vezes o padrão foi repetido) é isso que estou procurando. me ajude nisso?

#!usr/bin/perl -w
#use strict;
#use FindBin;
#use lib File::Spec->catdir($FindBin::Bin,'Lib');
#use ExtUtils::Installed;

use File::Find;
use File::Slurp;
my $in_dir="/home/prodigydell3/verilog";
my @all_files;
my $pattern='test>clk(\n|\t|\s)</test';

find(sub {
push @all_files,$File::Find::name if(-f $File::Find::name);
},$in_dir);


my $count=0;
foreach my $file_(@all_files){

my @file_con=read_file($file_);
foreach my $con(@file_con){

my $match = "true" if ($con=~m/$pattern/igs);
$count++;
}
print "The pattern is found in $file_ and number of lines is $count \n";
}
    
por prashanth 07.11.2012 / 14:27

1 resposta

1

Se o seu script estiver tentando usar o Arquivo :: Localizar , altere FILE para File . Perl diferencia maiúsculas de minúsculas.

BTW, postar um comentário na mensagem de erro também seria bom, sem mencionar uma pergunta.

Atualização: Depois de ver seu código, eu posso identificar alguns problemas: você provavelmente define $ count e $ match em um escopo errado (difícil de dizer, porque você nunca usa $ match). Tentei corrigir o problema:

#!/usr/bin/perl
use warnings;
use strict;

use File::Find;
use File::Slurp;
my $in_dir = '/home/prodigydell3/verilog';
my @all_files;
my $pattern = 'test>clk(\n|\t|\s)</test';

find(sub {
         push @all_files, $File::Find::name if (-f $File::Find::name);
     }, $in_dir);


foreach my $file_ (@all_files) {

    my $count = 0;
    my $match;
    my @file_con = read_file($file_);
    foreach my $con (@file_con) {

        $match = 1 if $con =~ m/$pattern/igs;
        $count++;
    }
    print "The pattern is found in $file_ and number of lines is $count \n" if $match;
}
    
por choroba 07.11.2012 / 14:31