Я бы не использовал для этого регулярное выражение. Скорее всего, вы столкнетесь с некоторыми файлами, которые имеют вещи в другом порядке, полностью испортив ваш шаблон. Вместо этого создайте структуру данных для хранения записей, выберите записи с записями TXT и из записей TXT найдите данные A. Хотя регулярные выражения забавны и мощны, хэши иногда даже мощнее:
use 5.010;
while( <DATA> ) {
chomp;
# maybe another normalization step here
my( $name, undef, $type, $data ) = split;
$records{$type}{$name} = $data;
}
foreach my $txt_record ( keys %{ $records{'TXT'} } ) {
my $txt_data = $records{'TXT'}{$txt_record};
my $a_data = $records{'A'}{$txt_record};
say join ' ', $txt_record, $a_data, $txt_data;
}
__DATA__
uniqname1.foo.bar IN A 10.0.0.1
uniqname1.foo.bar IN TXT "abcdefg"
uniqname2.foo.bar IN A 10.0.0.2
uniqname2.foo.bar IN TXT "xyz"
uniqname3.foo.bar IN A 10.0.0.3
uniqname4.foo.bar IN A 10.0.0.4