Yeah, why sort when you don't have to :)
#!/usr/bin/perl
# http://perlmonks.org/?node_id=1147112
use Inline::Files;
use strict;
use warnings;
my %id;
$id{ s/;.*//sr } .= $_ while <FILE1>;
print delete @id{ map s/\n//r, <FILE2> }, values %id;
__FILE1__
1 HD;BSkyB:11097:VC23M5O25P0S1:S28.2E:23000:2305=27:2307=NAR@4;2306=en
+g@106:2308;2309=eng:0:21000:2:2066:0
2 HD;BSkyB:11097:VC23M5O25P0S1:S28.2E:23000:2315=27:2316=NAR@4;2317=en
+g@106:2318;2319=eng:0:21020:2:2066:0
3 HD;BSkyB:11097:VC23M5O25P0S1:S28.2E:23000:2320=27:2321=NAR@4;2322=en
+g@106:2323;2324=eng:0:21030:2:2066:0
ITV HD;BSkyB:11097:VC23M5O25P0S1:S28.2E:23000:2305=27:2307=NAR@4;2306=
+eng@106:2308;2309=eng:0:21000:2:2066:0
__FILE2__
3 HD
1 HD
2 HD
|