I used a similar idea but did as follows:
my $file = '...the OPs File example..." #used as a string # to simplify my # test my @gi_ids = $file =~/gi\|(\d+)\|/g;
That leaves the list @gi_ids containing all of the gi id's that were in the string (i.e., it finds 4 gi id's in the OPs example).
Just another possible strategy. It looks to me like all of the respondents' ideas would work fine. Mine is just another variation.
Hope that helps.