First, loading it all inside an array might not be a good idea, if its a very large file you are asking for trouble, why not read it line by line until you reach start, save the lines until you read end and close the file at that time?
There's a discussion of this approach in perlfaq6: "How can I pull out lines between two patterns that are themselves on different lines?" — even a one-liner! See also the discussion of the scalar context .. flip-flop operator in Range Operators (scalar context sub-section) in perlop (some examples of what you want there also). (Update: See also Flipin good, or a total flop?, also with code that's almost exactly what theleftright seems to want.)