use File::Find; find(\&wanted,'.'); print "Total = $counter\n"; sub wanted { if ($_ =~/(?:\.pl|\.pm)/) { open (my $fh,"<",$_) or die "$!"; while (<$fh>) { if ($_ =~/^sub\s+/){$counter++} } close $fh; } }