If you're going to manually insert field delimiters, then you could just switch to using split:
in reply to Re^4: Converting a Text file to XML
in thread Converting a Text file to XML
But it's likely that the data will mostly fall into a few dominant format groups, with some long tail of "outliers". You could either apply a list of regex matches (if the first one doesn't work, try the next one, and so on), or you could try some simple diagnostics to divide the data into subsets according to the absense/presence/type of difficulty: if there's more than one 4-digit string, that's one problem; if there are no double quotes (or an odd number of quotes), that's another problem, ... This will reduce the number of cases that need to be fixed by hand in order to be parsable.
my ( $title, $date, $this, $that ) = split /\|/;