Если у вас всегда есть несколько новых строк между записями, рассмотрите возможность использования Разделитель записей для их чтения.Затем вы можете использовать быструю проверку для & и выполнить разделение / объединение:
use English '-no_match_vars';
sub read_records {
local $RS = "\n\n"; # or, for the machoistic, $/ works too without English
... # open the file
while (my $record = <$fh>) {
chomp $record; # uses $RS for what to remove, nice!
if ($record =~ /&\s*$/ms) { # & at the end of *any* line (w/only spaces)
$record = join ' ', split /\s*&\s+/, $record; # pull them out
}
... # do something with the record
}
}