I find this question unclear. Suppose that $m is 2 and $n is 3. Given that the phrase
"this is strange" appears, do you want to see
("this is strange") returned or
("this is strange", "this is", "is strange")?
From both a programming and a spec problem I like only looking for phrases of a given size (which was what was done in the story). From that you can derive your solution through:
sub p{
($m,$n,@_)=@_;map{f($_,@_)}$m..$n
}
An incidental note. The mathematician in me reads your phrase "a list of" and wants to offer the following cheat as a "solution":
sub p{()}
(It is a list, and everything in it is a phrase of the right size that appears in both lists!)
UPDATE
And, of course, I can show that all golf can be improved with the utterly ridiculous:
sub p{}