If every occurrence of the string " End" reliably marks the end of a record (that is, if no record ever includes " End" as part of the internal data), you could just set $/ to this string, and read just one complete "record" at a time:
{
local $/ = " End";
while (<>) {
s/.* Start//;
chomp; # removes $/ (" End") from end of string
print;
}
}