Я новичок в PERL и хотят подражать Grep -n, как это:perl emulate grep -n?
хотите:
# egrep -n 'malloc\(|free\(|printf\(' test.c
5:p = malloc(sizeof(char));
6:printf("Test\n");
7:free(p);
есть:
# perl grep.pl test.c
malloc\(line 7
free\(line 7
printf(
Processed 10 lines
Сценарий:
#!/usr/bin/perl
$verbose = 1;
@pattern = ('malloc\(', 'free\(', 'printf(');
$counter = 0;
open(FH, "<", $ARGV[1]) or die;
while (<>) {
my $matches = (@pattern[0-2]);
$counter++;
# print "line $counter:$_" if ($_ =~ /malloc\(/o);
print join("line $counter\t\n",@pattern),"\n" if ($_ =~ /$matches/o);
close (FH);
}
print "\n";
$verbose == 1 && print "Processed $counter lines\n";
Как-то счетчик ошибочен. Что мне здесь не хватает?
Что делает 'close (FH)' в этом цикле? – Mat
И что с 'open (FH," <", $ ARGV [1])' в первую очередь, учитывая, что чтение выполняется с '<>', а не ''? –
Почему downvotes? Вопрос недвусмыслен, и было показано усилие. Единственное, что я хочу знать, - это то, почему OP хочет сделать это в первую очередь. – Zaid