$a<=>$bってやってるじゃん。つかこの辺の仕組みで誤解して悩んでる気がする
>>127に近い形で書くとすると

use strict;
my @value;

while( <> ) {
 if( /(A|B|C) \| ON (\S+) \| OFF (\S+) \| (\S+)/ ) {
  push ( @value , [ $4, $_ ] );
 }
}

@value = sort{ $a->[0]<=>$b->[0] } @value;
print $_->[1] foreach( @value );


…あんま変わらんか