It seems that you want to show values (and their counts) that appear both in the database and in plain text input data. You process that data word by word, but the assignment to @intersections happens anew on each iteration. Previous assignments are lost and assignment occurs whether or not you find a match. So the final content of @intersections is that of the last word processed, and presumably, for your input data, there is no match for the last word.
I do not have an installed copy of List::Compare to hand, and the documentation doesn't say, but perhaps, even in a list context, it does an explicit return undef which would match the behaviour you see. Use Data::Dumper or similar to confirm what the data is.
Consider pushing your data to @intersections.