I prefer to match each field separately.
#!perl
use strict;
use warnings;
*FILE_EXPECTED_RESULT = *DATA;
while (<FILE_EXPECTED_RESULT>) {
next if /^\s*$/;
chomp;
print "\n", $_ , "\n";
my (@match) = /
( \w* \. (?: c|cpp|h ) ) # File Namew
\s*
( None | \d{1,2}\.\d\d%\sof\s\d{1,3} ) # Percent 2
\s*
( None | \d{1,2}\.\d\d%\sof\s\d{1,3} ) # Percent 3
/xms;
print "title : " . $match[0] . "\n";
print "percent2 : " . $match[1] . "\n";
print "percent3 : " . $match[2] . "\n";
}
close(FILE_EXPECTED_RESULT);
__DATA__
Title Percent2 Percent3
test1.cpp 0.00% of 21 0.00% of 16
test2.c None 16.53% of 484
test3.h 0.00% of 138 None