前面已经谈过到require可以引入pm文件。这个pm文件里可以包含一个类。其实require同样可以包含其它文件,比如pl文件。要引入的代码必须被非0值包围,比如“1”.
下面演示一个pl包含一个名为“add.txt”的文件:
- # add.txt
- sub add { return @_[0] + @_[1]; }
- 1;
- # 0; # 一定要以非零值结尾,否则会得到编译错误:add.txt did not return a true value
- # package.pl
- #!/usr/bin/perl
- require ("add.txt");
- print add(1, 2) . "\n"; # 3
同样,类也不一定非要定义在别的文件里,也可以在同一个文件,只要用package定义,直到遇到下一个package为止,都是类的内容:
- package tommy;
- sub new { $this = {}; bless $this; return $this; }
- sub show { print "I'm tommy\n"; }
- package main;
- $man = new tommy();
- $man->show(); # I
如果需要指定库目录,可以运行主程序时,用 -I 选项指定子程序库目录;或者在代码里在@INC数组中加入目录。
require还可以指定运行程序时需要的Perl版本:
- # require 6; # Perl v6.0.0 required--this is only v5.12.4
每个包有自己的符号表,在程序中可以在不同的包中切换:
- package pack1;
- $var = 5;
- package pack2;
- $var = 33;
- package pack1; # 切换回pack1
- print $var; # 5,对应的是pack1里的$var
- print $pack2'var; # 33,用单引号表示包
- print $pack2::var; # 33,Perl5中引入的双冒号
程序中不指定任何包的话,就会在默认的包(package main)里。包也可以在子程序内部切换,但引入的包的作用范围仅限于子程序内部.
可以在所有包中使用的系统变量:文件变量STDIN, STDOUT, STDERR 和 ARGV;变量%ENV, %INC, @INC, $ARGV 和 @ARGV;其它含有特殊字符的系统变量。
模块:之前已经说过模块就是一个pm文件,可以用use modulename导入一个模块,用no modulename取消导入模块.下面是一些预定义好的模块:
integer
|
使用整数运算
|
Diagnostics
|
输出较多的诊断信息(警告)
|
English
|
允许英文名用作系统变量的别名
|
Env
|
导入环境变量的Perl模块
|
POSIX
|
POSIX标准(IEEE 1003.1)的Perl接口
|
Socket
|
装载C语言的套接字处理机制
|
可以在上找到其它用户写的有用的模块.
阅读(1076) | 评论(0) | 转发(0) |