#########

​安装PERL cpan DBD::mysql错误笔记​

分类: Python/Ruby

2012-12-27 17:21:14

刚开始使用:cpan DBD::mysql 命令来安装该模块

由于是编译的版本的SQL版本,已经在/etc/profile 中修改:export PATH=/usr/local/mysql/bin:$PATH

担心找不到mysql lib文件。


报错如下:

# Tried to use 'DBD::mysql'.

# Error: Can't load '/root/.cpan/build/DBD-mysql-4.022/blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: libmysqlclient.so.16: 无法打开共享对象文件: 没有那个文件或目录 at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/DynaLoader.pm line 230.

# at (eval 6) line 2

# Compilation failed in require at (eval 6) line 2.

# BEGIN failed--compilation aborted at t/00base.t line 21.

FAILED--Further testing stopped: Unable to load DBD::mysql

make: *** [test_dynamic] 错误 9

/usr/bin/make test -- NOT OK

Running make install

make test had returned bad status, won't install without force

[root@localhost dbdata_backup]# perl -MCPAN -e shell

Terminal does not support AddHistory.


cpan shell -- CPAN exploration and modules installation (v1.7602)

ReadLine support available (try 'install Bundle::CPAN')


解决方式:

shell> perl -MCPAN -e shell

cpan> install DBI

cpan> install DBD::mysql 安装成功。


手工安装DBD安装技巧:

注意mysql的环境变量,若没有则用 添加/usr/local/mysql/bin到环境变量PATH中

PATH=/usr/local/mysql/bin:$PATH;

export PATH (mysql的安装路径根据实际情况填写)

wget http://cpan.perl.org/modules/by-module/DBI/DBI-1.601.tar.gz

tar -zxvf DBD-mysql-4.006.tar.gz

cd DBD-mysql-4.006

perl Makefile.PL –mysql_config=/usr/local/mysql/bin/mysql_config

make

make test

make install




####2 ​​Perl 连接Oracle 数据库​

分类: Oracle

2012-09-03 11:49:39


1.安装DBI和DBD::Oracle 模块。

下载地址:​​http://search.cpan.org/​

搜索DBI,DBD::Oracle

如果你的linux可以连接网络,执行命令:

#wget ​​http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.622.tar.gz​

#wget ​​http://search.cpan.org/CPAN/authors/id/P/PY/PYTHIAN/DBD-Oracle-1.50.tar.gz​

下载到当前目录。

2.安装

这里主要都是源码安装。

解压到目录:DBI-1.622

#tar –zxvf DBI-1.622.tar.gz

安装可以查看README文档。

一般步骤为

perl 学习_perl

DBD::Oracle安装与DBI相同。

3.

配置环境变量

# export ORACLE_HOME=/u01/oracle 

# export ORACLE_USERID='scott/tiger@ora11gR2' 

# export PATH=$ORACLE_HOME/bin:$PATH 

# export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

上面的方法只在当前登录环境有效,重新登陆后还需要重新配置。

这里建议的方法是使用Oracle 用户。或者将Oracle用户下.bash_profile文件拷贝到root目录下。

注意:LD_LIBRARY_PATH一定要修改,否则会报如下错误:

install_driver(Oracle) failed: Can't load '/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: libclntsh.so.10.1: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.5/i386-linux-thread-multi/DynaLoader.pm line 230.

4.数据库连接简单示例:


点击(此处)折叠或打开



  1. #!/usr/bin/perl -w

  2. use strict;
  3. use warnings;
  4. use DBI;

  5. my $dbname="orcl";
  6. my $user = "omc";
  7. my $passwd = "omc";

  8. my $dbh=DBI->connect("dbi:Oracle:$dbname",$user,$passwd) or die "can't connect to database";
  9. my $sth = $dbh->prepare("select count(*) from fx_alarm");
  10. $sth->execute;

  11. my $count = $sth->fetchrow_array;
  12. $sth->finish();#Indicates to DBI that you are finished with the statement

  13. print $count."\n";
  14. $dbh->disconnect;
  15. print "hello\n";


​http://www.kanbingcheng.com​

###4 变量 ,函数 ,以及 相关 函数

-> Perl 变量

变量是存储在内存中的数据,创建一个变量即会在内存上开辟一个空间。

解释器会根据变量的类型来决定其在内存中的存储空间,因此你可以为变量分配不同的数据类型,如整型、浮点型、字符串等。

上一章节中我们已经为大家介绍了Perl的三个基本的数据类型:标量、数组、哈希。

标量 $ 开始, 如$a $b 是两个标量。

数组 @ 开始 , 如 @a @b 是两个数组。

哈希 % 开始 , %a %b 是两个哈希。

Perl 为每个变量类型设置了独立的命令空间,所以不同类型的变量可以使用相同的名称,你不用担心会发生冲突。例如 $foo 和 @foo 是两个不同的变量。

-> 运算符:

eq 检查左边的字符串是否等于右边的字符串,如果是返回 true,否则返回 false。

-> 子函数

用户可以通过改变 @_ 数组中的值来改变相应实际参数的值。

向子程序传递列表

由于 @_ 变量是一个数组,所以它可以向子程序中传递列表。

但如果我们需要传入标量和数组参数时,需要把列表放在最后一个参数上,如下所示:

->正在表达式

匹配:m//(还可以简写为//,略去m)

替换:s///

转化:tr///

这三种形式一般都和 =~ 或 !~ 搭配使用, =~ 表示相匹配,!~ 表示不匹配。

替换操作符 s/// 是匹配操作符的扩展,使用新的字符串替换指定的字符串。基本格式如下:

s/PATTERN/REPLACEMENT/;

PATTERN 为匹配模式,REPLACEMENT 为替换的字符串。

例如我们将以下字符串的 "google" 替换为 "runoob":

实例

#!/usr/bin/perl


$string = "welcome to google site.";

$string =~ s/google/runoob/;


print "$string\n";


更多正则表达式规则

abc 匹配含有 abc 的字符串 (pattern) () 这个符号会记住所找寻到的字符串,是一个很实用的语法.第一个 () 内所找到的字符串变成 $1 这个变量或是 \1 变量,第二个 () 内所找到的字符串变成 $2 这个变量或是 \2 变量,以此类推下去.

-> push 语法

1. push @ARRAY, LIST

将列表的值放到数组的末尾

#!/usr/bin/perl


# 创建一个简单是数组

@sites = ("google","runoob","taobao");

$new_size = @sites ;

print "1. \@sites = @sites\n"."原数组长度 :$new_size\n";

# 在数组结尾添加一个元素

$new_size = push(@sites, "baidu");

print "2. \@sites = @sites\n"."新数组长度 :$new_size\n";

->eval 语法

#!/usr/bin/perl -w


push ( @program,'$i = 1;');

push ( @program,'$i = 3; $j = 2; $k = $i + $j');

push ( @program, '$i = 3; return 24; $k = $i + $j');


foreach $exp (@program)

{

$rtn =eval($exp);

print $rtn,"\n";

}

在执行时, Perl 解释器会首先解析表达式的值,然后将表达式值作为一条 Perl 语句插入当前执行上下文。所以,新生成的语句与 eval 语句本身具有相同的上下文环境。这种方式中,每次执行eval 语句,表达式都会被解析。所以,如果 eval EXPR 如果出现在循环中,表达式可能会被解析多次。 eval 的这种方式使得 Perl 脚本程序能实时生成和执行代码,从而实现了“动态代码”。

测试代码如下: eval 相当于 EOF linux ,需要转义 符号

#$a = 19;

eval "unless (29 < 20) { print \"KO\";print \"KO\";}";

unless (29 < 20) { print "KO";print "KO";};

print "p";



• eval BLOCK

• eval EXPR

• eval



eval 关键字在Perl 里起两种不同的但相关的作用。这些目的是用两种形式的语法

来表现的, eval BLOCK 和eval EXPR。第一种形式捕获那些致命的运行时例外

(错误),类似于C++ 或Java 里的“try 块”。

————————————————

版权声明:本文为博主「zhaoyangjian724」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。


-> unless 语法

unless(boolean_expression 1){

# 在布尔表达式 boolean_expression 1 为 false 执行

->our 和 my 语法


our 和 my 一样,都是对变量的声明,

不过 our 声明的是包全局变量,

而 my 声明的是词法变量。


不过,经过 our 声明的变量,它会变得像一个词法变量一样,

其实这也是 our 存在的目的:用来欺骗 strict pragma,使 strict 以为它是一个词法变量,其实却不是。


有一个简单的办法可以理解 our:

1,你就把 our 声明的变量和 my 声明的当成一样。

2,记住 our 和 my 的区别:our 声明的是一个包全局变量,因此在符号表中存储(可以通过全限定在任何地方访问),而 my 声明的是一个真正的词法变量,只能在闭合块中访问。

代码例子

perl 学习_mysql_02

my $var = 1;
{
my $var = 2;
print $var, "\n";
}
print $var, "\n";

perl 学习_mysql_02

输出:

2

1

perl 学习_mysql_02

our $var = 1;
{
our $var = 2;
print $var, "\n";
}
print $var, "\n";

perl 学习_mysql_02

输出:

2

2


ps:

{} 中的 “ 需要加入\ 转义


炊烟起了;夕阳下了;细雨来了 多调试,交互式编程体验 记录,独立思考,对比 感谢转载作者 修车 国产化 read and connect 匍匐前进, 讲故事