Как я уже говорил ранее, есть некоторый каталог, называемый verilog, который является языком HDL, используемым для описания оборудования. Внутри этого каталога есть много подкаталогов и доступны файлы .v. Поэтому мне нужно искать шаблон с именем clk во всех файлах и в каталоге с номером строки, где именно находится шаблон в каждом файле, и мне нужно подсчитать, сколько раз появился clk. Теперь я мог просматривать каталоги и файлы, но я не мог получить номер строки файла, в котором произошел шаблон, и счетчик (сколько раз шаблон повторялся), это то, что я ищу. помочь мне в этом?
#!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";
}
Если ваш скрипт пытается использовать File :: Find , измените FILE
на File
. Perl чувствителен к регистру.
Кстати, было бы неплохо опубликовать комментарий к сообщению об ошибке, не упоминая вопрос.
Обновление: После просмотра вашего кода я могу выявить некоторые проблемы: вы, вероятно, определяете $ count и $ match в неверной области (трудно сказать, потому что вы никогда не используете $ match). Я пытался решить проблему:
#!/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;
}