qazxsw1 发表于 2017-5-19 07:32:31

神奇的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中的行政区
部分代码如下:
#输出统计结果
  <!--StartFragment-->
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,<MYIP>;
map {print $_.'==>'.$iphash{$_}."\n"} keys %iphash;
close MYIP;
#输出“四川省成都市==>3”等统计信息
  #<!--StartFragment--> getiparea子程序得到IP来源地区,唯一的参数是要查询的IP地址
页: [1]
查看完整版本: 神奇的perl-第六个任务(12)