in reply to Re: How to Save a variable outside of a loop
in thread How to Save a variable outside of a loop

You also need to skip the comparison for the first line of data.
Or you could just give an initial dummy value to the two previous variables, thereby saving some steps within the loop:
#!/usr/bin/perl use warnings; use strict; my ($prev_l, $prev_p) = ("", ""); while(<>){ my $hitlength; my $prevalence; my $line = $_; chomp $line; if ($line =~ /^[\d]/){ my @hitline = split(/,/ , $line); $hitlength = $hitline[4]; $prevalence = $hitline[65]; if( $hitlength == $prev_l and $prevalence == $prev_p ){ next; } else { print "$line\n"; } $prev_l = $hitlength; $prev_p = $prevalence; } }

Replies are listed 'Best First'.
Re^3: How to Save a variable outside of a loop
by AnomalousMonk (Archbishop) on Aug 01, 2015 at 10:38 UTC

    That'll yield a warning:

    c:\@Work\Perl\monks>perl -wMstrict -le "my $x = ''; print 'equal' if $x == 1; " Argument "" isn't numeric in numeric eq (==) at -e line 1.


    Give a man a fish:  <%-(-(-(-<

      Yes, AnomalousMonk, you're right, I did not pay attention to the fact that the code is using numeric comparison. I'm doing this type of things regularly, but usually with the string eq operator, even when the data string is numeric (say a customer number or a phone number with only digits). Reducing the number of operations made in the while (<$fh>) loop makes some sense when removing duplicates from a 500-million-line file.
Re^3: How to Save a variable outside of a loop
by poj (Abbot) on Aug 01, 2015 at 10:48 UTC

    Apart from the warning, you have to be certain that on the first line of data those 2 fields don't contain the dummy values you initialize to otherwise it will be treated as a duplicate and skipped.


    poj