求救关于perl 文件与数组。。急。。。

求救关于perl 文件与数组。。急。。。

请教各位高手。
现在有一个TXT日志文件,如下:
10.1.0.1 asdfasdfasdfasdfasdfasdfasdfasdfasdf  ""usrname"
11.12.13.11............
10.1.1.10...........
..........

这个文件一共90万行

现在想从文件中取出每一行最前的IP地址和最后的用户名。
然后统计出这个IP在日志中出现过多少次,和对应的用户名出现过多少次。
用perl怎么来实现啊?请各位高手,赐教。谢谢
下面是我写的一点,但这样做太慢。请高手指教。急。。。。

open (FILE_BB,"<./bb.txt") or die "file open error";
@file_BB = <FILE_BB>;
$count1= @file_BB;
for ($j=0;$j<$count1;$j++)
  {
    @ffbb = split /@/,$file_BB[$j];
    push @lis, $ffbb[0];
    push @lis1, $ffbb[1];
  }
   
    my %uniq = map {$_ => 1} @lis;
    my @lis_uniq = keys %uniq;

    my %uniq = map {$_ => 1} @lis1;
    my @lis1_uniq = keys %uniq;

    $count2 = @lis_uniq;
    $count3 = @lis;
for ($k=0;$k<$count2;$k++)
  {
    $num = grep /$lis_uniq[$k]/, @lis;
    $num1 = grep /$lis1_uniq[$k]/, @lis1;
    if ($num==0)
    {
      $num=1;
    }
    if ($num1==0)
    {
      $num1=1;     
    }
@file_BB = <FILE_BB>;

不知道这都是谁教的。实在搞不懂弄到数组里有什么好。
这个问题《小骆驼书》里讲过,还是用while(<FILE>)形式效率高。