admin 发表于 2011-11-24 20:06:33

一步一步研究OTRS(02)

一步一步研究OTRS(02)

Kernel::System::Web::InterfaceAgent;


第一句:

package Kernel::System::Web::InterfaceAgent;



package的作用是定义包的名称,之后所定义的所有变量和子程序都储存在这个包中,直到遇到另一个package语句。

在程序里面可以任意在包之间切换,比如:



package pack1;

$var = 1;

package pack2;

$var = 2;

package pack1;

print $var;



运行该程序将会输出:“1”。

在Perl中,有个特殊的包:main,存贮变量和子程序的名字的缺省符号表是与名为main的包相关联的。如果在程序里定义了其它的包,当你想切换回去使用缺省的符号表,可以重新指定main包:

package main;

这样,接下来的程序就好象从没定义过包一样,变量和子程序的名字象通常那样存贮。

在Perl中,引用一个包中的变量或子程序可以使用如下格式之一:

包名::变量名

包名’变量名

建议使用第一种方式,未来可能会淘汰第二种方式。

另外,有一些特殊变量即使在包中调用,仍在main包中起作用,他们是:

文件变量:STDIN,STDOUT,STDERR和ARGV
变量:%ENV,@INC,$ARGV和@ARGV
其它含有特殊字符的系统变量
另外,你可以在perldoc上找到详细的介绍,如果你不惧en;另外,这些文章我都尽量转载到我的BLOG中,以下是Package的perldoc:

u/29953/showart_303926.html



搞清楚了包的概念,再升级到模块就容易了。

大型开发中,一般会把程序分割成多个部分,每个部分完成特定的任务,这样提高了代码的重用性,也使得开发工作更易管理,那这每个部分就被称为模块。

创建模块很简单,只要把包存为同名的,后缀为pm的文件就好了,比如名为module的包保存为module.pm。

另外请注意,在模块的最后一定要加入:

1;

否则模块不能被正确识别。



那么引用一个模块可以使用use语句,如:

use Kernel::System::Web::InterfaceAgent;

引用模块以后就可以直接使用模块里面定义的方法了。

Perl的发行版中,内置了很多模块,另外还有一个很好的东东CPAN,这我会另开专题讨论,使用起来还是很简单的,你可以自己去查看h 。



模块的开发涉及到Perl的面向对象编程,事实上Perl并不是真正的面向对象,它采用了一个很狡猾的办法以达到面向对象的目的,这个暂不讨论。



好了,回到OTRS,接下来的一句是



use strict;



这个说起来也可以长篇大论了(Perl里面随便一个东西都可以长篇大论,如果大学论文不知道怎么写,来学习Perl吧),我这里只是简单的说几句,当你的程序超过一页时,请务必使用use strict,它会强迫你使用my定义变量,这样基本可以避免因为拼写造成的错误,这时如果你使用了没有用my定义的变量会收到如下错误:

Global symbol "$aaaa" requires explicit package name at ./this.pl line 5.

查看你的程序,第五行你会发现没有用my定义的变量。

当然还有用use warning或者直接在命令行参数里用“#!/usr/bin/perl –w”的,这里不再详细介绍,当然这些都不能完全解决问题,但是一个比一个懒的Perl 程序员,你想去超过500行的代码里查找一个拼写错误吗?



接着往下看



use vars qw($VERSION @INC);

$VERSION = '$Revision: 1.17.2.1 $';

$VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/;



这里给出了这个模块的版本号

然后是引用了一大堆模块:



# all framework needed modules

use Kernel::Config;

use Kernel::System::Log;

use Kernel::System::Main;

use Kernel::System::Encode;

use Kernel::System::Time;

use Kernel::System::Web::Request;

use Kernel::System::DB;

use Kernel::System::Auth;

use Kernel::System::AuthSession;

use Kernel::System::User;

use Kernel::System::Group;

use Kernel::System::Permission;

use Kernel::Output::HTML::Layout;



先打住吧,我想想是深入这些模块还是接着往下看。

页: [1]
查看完整版本: 一步一步研究OTRS(02)