编写Perl模块
这两天在用Perl编写一些监控脚本,其实写代码也是一件挺有意思的事情,就是挺废时间的。而且,由于语法不太熟,基本想到一个东西都要先Google一下看怎么实现。Perl的语法相对来说有点晦涩,主要是一些内置变量和函数处理得相当精巧,而过于精致的东西理解起来就有点费力。相对于Shell,Perl在很多方面更加强大高效,比如Hash(关联数组)就非常好用,如果要将不同主机发出来的告警信息发送到不同的责任人,在shell中要做非常多的if或者case判断,修改起来也非常费力,而使用关联数组,则可以轻松实现该功能,代码简洁,配置方便,一个字,爽。
Perl支持以模块对代码进行封装。著名的CPAN上就有非常多好用的Module,可以极大的减轻开发量。一个简单的模块:
package NinGoo;
require Exporter;
use strict;
use warnings;
our @ISA = qw(Exporter);
our @EXPORT = qw(func_public); #要输出给外部调用的函数或者变量,以空格分隔
our @version = 1.0;
sub func_private{
print “This is a private function”;
}
sub func_public{
print “Hello,world\n”;
func_private();
}
1;
__END__
模块的文件名一般以.pm做后缀,名字和package相同,也就是上面这个Module的名字为NinGoo.pm。然后在普通的.脚本中调用:
#!/usr/bin/perl -w
# creator: NinGoo
# function: test perl module
BEGIN {
push (@INC,’/home/module’);
}
use strict;
use NinGoo;
func_public();
O’Relly出版了一系列Perl的图书,比较著名的大骆驼《Programming Perl》在这里有一个在线中文版本的,可以看看。
Redhat上安装Perl DBD::mysql驱动
打算熟悉下perl,自然主要用于数据库管理和监控方面的,所以需要连接数据库。Perl连接数据库可以通过DBI模块和相应数据库的DBD驱动,上一篇记录了DBI模块的安装,这里记录下DBD::mysql驱动的安装。可以从CPAN下载相应DBD驱动。
安装过程很简单,下载解压:
gzip -d DBD-mysql-4.006.tar.gz
tar xvf DBD-mysql-4.006.tar
然后进入DBD-mysql-4.006目录,执行:
perl Makefile.PL
make
make test
make install
检查已经安装的Perl模块:
# ./perl-module.pl
DBD::mysql
DBI
Perl
安装DBD::mysql需要mysql_config,包含在Headers and libraries安装包中(MySQL-devel-community-5.1.23-0.rhel4.i386.rpm),并且PATH环境变量中必须包含mysql_config所在的路径。否则在执行perl Makefile.PL生成makefile的时候会报错:
Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 76.
Cannot find the file ‘mysql_config’! Your execution PATH doesn’t seem
not contain the path to mysql_config. Resorting to guessed values!
Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 466.
通过调用DBI->available_drivers()函数可以查看当前系统中已经安装好的所有驱动。安装好DBI和DBD::mysql后,就可以访问MySQL数据库啦,首先在test库中创建一个table:
create table test(id int,name varchar(30))
然后执行下面的Perl脚本插入一条数据并且查询得到结果:
#!/usr/bin/perl
use DBI;
my $dbh = DBI->connect(“DBI:mysql:database=test;host=localhost”,”NinGoo”,”password”, {‘RaiseError’ => 1});
my $rows = $dbh->do(“INSERT INTO test (id, name) VALUES (1, ‘NinGoo’)”);
my $query = $dbh->prepare(“SELECT name FROM test”);
$query->execute();
while(my $rs = $query->fetchrow_hashref()) {
print “$rs->{‘name’}\n”;
}
Redhat上安装Perl DBI模块
打算熟悉下perl,自然主要用于数据库管理和监控方面的,所以需要连接数据库。Perl连接数据库需要安装DBI模块和相应数据库的DBD驱动,Linux上默认安装的Perl是没有该模块的。可以从CPAN下载DBI模块进行安装。
安装过程很简单,下载解压:
gzip -d DBI-1.604.tar.gz
tar xvf DBI-1.604.tar
然后进入DBI-1.604目录,执行:
perl Makefile.PL
make
make test
make install
以下脚本可以用来检测系统中已经安装的Perl模块:
#!/usr/bin/perl
use ExtUtils::Installed;
my $inst = ExtUtils::Installed->new();
print join “\n”,$inst->modules();
安装完DBI后执行该脚本的结果如下:
# ./perl-module.pl
DBI
Perl
DBI的文档可以通过perldoc查看:
#perldoc DBI
