in reply to Don't understand behavior of this split

You're trying to 1) separate the paragraphs, then 2) extract the data from those paragraphs. split could be use for the former, but it won't be sufficient. This will do both:
my @matches = m{<p>\s*(.*?)\s*</p>}sg;