|
一步一步研究OTRS(1)
Perl!该学的也学的差不多了,但是俗话说:Perl是一门自由奔放的语言!正因为如此,让人觉得perl的语法结构不规范。说到这里我想知道,程序是用来做什么的,程序实际上是给懒人用的,它的目的其实是代替人的重复工作,那么为什么不可以用自己喜欢的方式去做,为什么一定要遵循什么规矩呢?最后达到目的不就行了。
但是话说回来,这门狂放不羁的语言有的时候写完如果注释不好,真的很难让别人看懂,很多习惯用法只是自己知道,但是如果开发一个大型项目,你不可能不去看别人写的东西,那只有通过多看多了解了。最近一直在研究OTRS,这是一个客户服务系统,里面应该涉及到Perl的方方面面,这里我想通过研究OTRS的源代码温习Perl的目的,顺便也看看大型项目里Perl的使用。
用到的东西主要是下面这些:
otrs-2.1.5(安装过程请自行查看包里的安装文档,里面涉及到Perl的CPAN安装,我会单独在另一个专辑中介绍这个东东,并且很多东西安装的时候不是真的像其宣称的一步到位,错误信息里面会有很多有用的东西,相信你安装完这个东西,有关Perl的配置再也难不倒你了,)
官方网站:
Perl的版本是 5.8.5 装DBI+DBD-Mysql的时候好像有问题,需要降个版本。
apache-2.0.58
我将按照用户从浏览器浏览的顺序逐步分析。
首先当然是index.pl,如果你按照安装说明的默认配置,那么整个程序包应该被安装到:/opt/otrs目录,这里没有使用mod-perl的安装方式,apache的版本和otrs要求的不同,所以有些地方会有问题,需要手工改动OTRS的源代码,有些麻烦,这里不说。
如果你觉得用vi看这些代码很麻烦,那么我强烈建议你大包下载到本地用Editplus分析,我就是这么做的。
index.pl文件其实很简单,源文件如下
#!/usr/bin/perl -w
# bin/cgi-bin/index.pl - the global CGI handle file (incl. auth) for OTRS
# Copyright (C) 2001-2006 OTRS GmbH,
# $Id: index.pl,v 1.81 2006/08/26 17:29:03 martin Exp $
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# --
# use ../../ as lib location
use FindBin qw($Bin);
use lib "$Bin/../..";
use lib "$Bin/../../Kernel/cpan-lib";
use strict;
use vars qw($VERSION @INC);
$VERSION = '$Revision: 1.81 $';
$VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/;
# check @INC for mod_perl (add lib path for "require module"!)
push (@INC, "$Bin/../..", "$Bin/../../Kernel/cpan-lib");
# 0=off;1=on;
my $Debug = 0;
# load agent web interface
use Kernel::System::Web::InterfaceAgent();
# create new object
my $Interface = Kernel::System::Web::InterfaceAgent->new(Debug => $Debug);
# execute object
$Interface->Run();
可以看到里面注释居多,再次强调,写代码一定重视注释,除非你确定这个程序只有你自己会用,即使这样,恐怕你也不想每次都详细的去研究。
首先看第一部分
use FindBin qw($Bin);
use lib "$Bin/../..";
use lib "$Bin/../../Kernel/cpan-lib";
这里需要说的是FindBin的用法,它主要用于定位当前程序的绝对目录,在部署自己的pm时很有用,具体使用请参见FindBin模块使用手册:[ /u/29953/showart.php?id=303173]u/29953/showart.php?id=303173[/url]
接下来是vars,定义了两个全局变量,那么在use strict的环境里,要使用这两个变量,不用再使用my方法,有关vars的具体使用手册请参见[ /u/29953/showart.php?id=303176]u/29953/showart.php?id=303176[/url]
接下来可以看到,作者把自己的模块目录push到perl的环境变量@INC里面,这其实是个很好的招数,以后可以如下面
use Kernel::System::Web::InterfaceAgent();
这样直接调用自己写的模块了。
接下来我们综合起来看剩下的部分,根据字面意思,其实是在初始化一个用户界面,调用的是Kernel::System::Web::InterfaceAgent,根据前文所述,我们可以在/opt/otrs/Kernel/System/Web目录里找到InterfaceAgent文件,接下来调用该模块的new方法,并传入参数Debug,最后使用Run方法生成最终用户界面。
那么在下文中我们会跟踪介绍InterfaceAgent这个模块,看看是不是如我们所想。
文章出处:飞诺网([ ):[url]course/4_webprogram/cgi/perljs/200862/120165.html[/url]]www.diybl.com):[url]course/4_webprogram/cgi/perljs/200862/120165.html[/url][/url]
|
|