my $rx_altloc_groupByAlt = qr/ #(?= (^ATOM.{9}(.{3})(\w)\w{3}(.{6}).+$ [\r\n]) ((?:^.+$ [\r\n])*) #) (ATOM.{9}\2(?!\3).\w{3}\4.+$ [\r\n]) (?{ $altloc = $3; }) /xm; ... $file_contents =~ s/$rx_altloc_groupByAlt//g;