Depending on your requirements (is this a one-time thing, size of data, etc, and the 'difference' you want), you could use
DBD::CSV (or in-memory tables with
DBD::AnyData) and use SQL to JOIN the two tables looking for your desired results.. Something like (note this example is only cases where the id exists in both files--excercise for reader to use LEFT JOIN for the other cases):
my $sql = <<EOF;
SELECT
t1.id,
SUM(t2.hrs_expected) - SUM(t1.hrs_expected) as hrs_expected_diff
FROM file1 as t1
JOIN file2 as t2 ON t2.id = t1.id
GROUP BY t1.id
HAVING SUM(t1.hrs_expected) != SUM(t2.hrs_expected)
EOF