in reply to Parsing multi-line records

Without fully understanding your input data, simply setting $/ (which, in English, literally means INPUT_RECORD_SEPARATOR) to your separator (:?) could do exactly what you want.
my @data; { local $/ = ":"; # or "\n:\n" for : on an empty line @data = <DATA>; }
This would put each "record" (set of lines) into individual elements of @data. It'd be up to you then to split on newlines or whatever, and to eliminate the trailing : on most records.