Raid5
Raid5

Reputation: 51

PERL: repeated lines

I'm writing a perl code that print a massage/send a mail if there is a repeated line found in a file. My code so far:

#!/usr/bin/perl 
use strict;
my %prv_line;
open(FILE, "somefile") || die "$!";
while(<FILE>){
    if($prv_line{$_}){
         $prv_line{$_}++;
     }
    #my problem: print  I saw this line X times
    }
close FILE

My problem: How do generate a static msg with output: print "I saw this line X times" without printing the script output Thanks

Upvotes: 1

Views: 197

Answers (2)

Borodin
Borodin

Reputation: 126722

Your original code is very close. Well done for use strict and putting $! in the die string. You should also always use warnings, use the three-parameter form of open, and use lexical file handles.

This program should help you.

use strict;
use warnings;

my %prv_line;
open (my $FILE, '<', 'somefile') || die $!;
while (<$FILE>) {
  if ( $prv_line{$_} ) {
    print "I saw this line $prv_line{$_} times\n";
  }
  $prv_line{$_}++;
}

Upvotes: 1

varnie
varnie

Reputation: 2595

probably, here's what you want:

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

my %lines;

while(<DATA>) {
    chomp;
    $lines{$_}++; 
}

while (my($key, $value) = each %lines) {
    print "I saw the line '$key' $value times\n";
}

__DATA__
abc
def
def
def
abc
blabla

avaddv

bla
abc

Of course, it can be improved.

Upvotes: 2

Related Questions