Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1737008
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: Python/Ruby

2012-03-26 11:57:58

前面已经谈过到require可以引入pm文件。这个pm文件里可以包含一个类。其实require同样可以包含其它文件,比如pl文件。要引入的代码必须被非0值包围,比如“1”.

下面演示一个pl包含一个名为“add.txt”的文件:


  1. # add.txt

  2. sub add { return @_[0] + @_[1]; }

  3. 1;
  4. # 0; # 一定要以非零值结尾,否则会得到编译错误:add.txt did not return a true value

  1. # package.pl
  2. #!/usr/bin/perl

  3. require ("add.txt");

  4. print add(1, 2) . "\n"; # 3

同样,类也不一定非要定义在别的文件里,也可以在同一个文件,只要用package定义,直到遇到下一个package为止,都是类的内容:


  1. package tommy;

  2. sub new { $this = {}; bless $this; return $this; }
  3. sub show { print "I'm tommy\n"; }

  4. package main;

  5. $man = new tommy();
  6. $man->show(); # I


如果需要指定库目录,可以运行主程序时,用 -I 选项指定子程序库目录;或者在代码里在@INC数组中加入目录。

require还可以指定运行程序时需要的Perl版本:


  1. # require 6; # Perl v6.0.0 required--this is only v5.12.4


每个包有自己的符号表,在程序中可以在不同的包中切换:
  1. package pack1;
  2. $var = 5;
  3. package pack2;
  4. $var = 33;
  5. package pack1; # 切换回pack1
  6. print $var; # 5,对应的是pack1里的$var
  7. print $pack2'var; # 33,用单引号表示包
  8. 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语言的套接字处理机制
可以在上找到其它用户写的有用的模块.
阅读(1010) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~