欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

神奇的PERL-第六个任务(1)

程序员文章站 2022-04-29 13:52:31
...

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

BOSS交待一个任务,对某客户网站的访客进行网站流量分析,有以下要求:

1、按来源地区统计人数。

2、能在WINDOWSLINUX下运行。

网站提供类似于以下格式的访问日志(iplog.txt),每项用TAB分隔:

日期     时间         IP来源

2010/8/3 9:42   159.226.117.45

2010/8/3 9:42   114.249.218.138

2010/8/3 9:41   58.211.230.30

我们计划首先使用正则表达式的正则变量捕捉时间、IP地址,接着根据IP地址查询地区,最后进行统计。

1 

2 

3 

4 

5 

5.1 

5.2 

5.3 

5.4 

5.5 

5.6 

5.7 

 

 

5.7.1 使用module

Perl 里,一个名字空间为一个包,包独立于文件,在一个文件里能有许多包,一个包也能跨越多个文件。

1、包的声明与符号表

package 用来声明包,声明的有效范围从声明本身开始直到遇到块结尾或文件结束或 eval或同层次的 package 声明。标识符可以是包中的标量变量,数组变量,子过程,文件或者目录句柄,它们将放到所属当前包的符号表中,可供其它包访问。

很显然,这些标识符不包括那些用 my 声明的变量,它的变量名和变量值的访问范围都被限定在包内,不能被外部访问,在本包使用的其它包的变量当然也不会放入本包的符号表。而our声明的变量可通过所谓的别名访问,因此能被放入符号表中。

1、 包标识符的访问

访问引用包中的标识符的方法是:$包名:符号名

没有my声明的变量声明缺省时属于 main 包,比如:

$x=1;

print  $main::x;

输出:1

3、使用模块

模块是 Perl 里重复使用的基本单元。它是定义在一个以.pm结尾的同名文件中的包,可以通过以下2种方式使用模块:

use MODULE LIST;

 use MODULE;

MODULE为模块名,LIST为符号列表。

1)     requie

require 语句在运行时从其它文件(包括模块)装载定义,比如:

perl4-14.pl代码如下:

#perl4-14.pl

require "mydy.pl";#引用mydy.pl中的定义

print $x;

mydy.pl代码如下:

#mydy.pl

$x=1;

运行perl4-14.pl后,成功输出了mydy.pl中定义的$x值:1

2)     use

use在编译时将把你需要的符号导进来,如果你不提供符号的LIST,将使用在模块的内部 @EXPORT 数组里命名的符号。