神奇的perl-第六个任务(12)

阅读更多

本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载

5.1以城市为单位进行统计
我们以perl4-13.pl脚本为基础,以城市为单位进行统计,perl4-13.pl输出结果过于详细,出现了“广东省广州市海珠区”等含行政区的IP来源地区,使用正则替换将行政区从来源地区字符串中移除。
   my $area=getiparea($ip);#getiparea为取得IP对应的来源地区子程序。
   my $qu=decode('utf8','区');
   my $shi=decode('utf8','市');  
   $area=~s/(.+)$shi(.+)$qu/$1$shi/;#去除来源地区$area中的行政区
部分代码如下:
#输出统计结果

sub areaanlysis{

#对地区进行统计,结果放在%iphash中,键是城市,值是次数。

#map将地区字符串元素放入$_中。

   my $line=$_;

   if ($line=~m/$ipm/){

   my $area=getiparea($1);

   my $qu=decode('utf8','区');

   my $shi=decode('utf8','市');  

   $area=~s/(.+)$shi(.+)$qu/$1$shi/;

   my $title=decode('utf8','正在处理地区数据:');

   print $title.$area."\n"; 

   $iphash{$area}++;

   }     

}


open MYIP,"<$fn";
map &areaanlysis,;
map {print $_.'==>'.$iphash{$_}."\n"} keys %iphash;
close MYIP;
#输出“四川省成都市==>3”等统计信息

# getiparea子程序得到IP来源地区,唯一的参数是要查询的IP地址

你可能感兴趣的:(Perl,脚本)