admin 发表于 2011-11-24 19:40:20

一步一步研究OTRS

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

接下来是vars,定义了两个全局变量,那么在use strict的环境里,要使用这两个变量,不用再使用my方法,有关vars的具体使用手册请参见u/29953/showart.php?id=303176

接下来可以看到,作者把自己的模块目录push到perl的环境变量@INC里面,这其实是个很好的招数,以后可以如下面

use Kernel::System::Web::InterfaceAgent();
这样直接调用自己写的模块了。

接下来我们综合起来看剩下的部分,根据字面意思,其实是在初始化一个用户界面,调用的是Kernel::System::Web::InterfaceAgent,根据前文所述,我们可以在/opt/otrs/Kernel/System/Web目录里找到InterfaceAgent文件,接下来调用该模块的new方法,并传入参数Debug,最后使用Run方法生成最终用户界面。
那么在下文中我们会跟踪介绍InterfaceAgent这个模块,看看是不是如我们所想。

文章出处:飞诺网([):course/4_webprogram/cgi/perljs/200862/120165.html]www.diybl.com):course/4_webprogram/cgi/perljs/200862/120165.html

深爱那片海 发表于 2014-4-18 01:20:32

无论是不是沙发都得回复下

忐忑幽灵 发表于 2014-4-19 07:56:42

LZ敢整点更有创意的不?兄弟们等着围观捏~

hepcsgcc@qq.com 发表于 2014-10-30 09:37:40

支持原创啊

slo 发表于 2017-2-1 14:42:43

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