神奇的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地址
上一篇: 神奇的Perl-正则表达式(3)