perl 学习

#########

 

分类: 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
 

分类: 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文档。

一般步骤为

image 

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 块”。

————————————————
版权声明:本文为CSDN博主「zhaoyangjian724」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhaoyangjian724/article/details/51526721/

 


-> 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 声明的是一个真正的词法变量,只能在闭合块中访问。

代码例子

复制代码
my $var = 1;

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

print $var, "\n";
复制代码

输出:

2

1

复制代码
our $var = 1;

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

print $var, "\n";
复制代码

输出:

2

2

 

ps:

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

posted @ 2019-10-21 18:27  feiyun8616  阅读(274)  评论(0编辑  收藏  举报