一步一步研究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]