in reply to one line regex eating CPU

Don't m//, do s///.
push(@titles, $1) while $source =~ s/<title>(.+)<\/title>//i;
You must weed out what you've gathered so far, or you will get the same first match forever.
_($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                              /\_¯/(q    /
----------------------------  \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}