in reply to Counting occurances of a pattern in a file

You are definately overusing <INPUT>. Each time you do that, it reads another line... Your loop only checks every 3rd line for /^Algorithm/. It chomps the first line, checks the second one for /^Experiment Name/, and checks the third for /^Algorithm/.

I'd write that subroutine as:

sub getExpNumber { my $filePath = shift; my $n; open (INPUT,"<$filePath") or die "Can't open $filePath: $!\n"; while (<INPUT>) { chomp; last if /^Experiment Name/; $n++ if /^Algorithm/ } print "There are $n experiments in $filePath\n" close(INPUT) or die "Can't close $filePath: $!\n"; return $n; }
/pattern/ works on $_ if nothing is bound to it, and while(<FILE>) {...} puts the line read into $_. So the two statements that have if /pattern/ at the end match the line read.