Я распознаю их как строки заголовков NCBI seq, так что я знаю, что они имеют фиксированное количество полей.
Поскольку это поля / столбцы, вы можете разделить и объединить:
my @rec = split(/\|/, $id);
my $idShort = join("|", @rec[0..3]);
print $idShort, "\n";
Или вы можете использовать регулярное выражение:
if ($id =~ /^(gi\|\d+\|\w+\|[\w\_]+\.\d+\|)/) { print "$1\n" } else { die("Unparseable: $id\n") }
Но мне нравится использование Hambone вRindex.