perl 学习
#########
分类: Python/Ruby
2012-12-27 17:21:14
由于是编译的版本的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
分类: Oracle
2012-09-03 11:49:39
1.安装DBI和DBD::Oracle 模块。
搜索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文档。
一般步骤为
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.数据库连接简单示例:
点击(此处)折叠或打开
- #!/usr/bin/perl -w
- use strict;
- use warnings;
- use DBI;
- my $dbname="orcl";
- my $user = "omc";
- my $passwd = "omc";
- my $dbh=DBI->connect("dbi:Oracle:$dbname",$user,$passwd) or die "can't connect to database";
- my $sth = $dbh->prepare("select count(*) from fx_alarm");
- $sth->execute;
- my $count = $sth->fetchrow_array;
- $sth->finish();#Indicates to DBI that you are finished with the statement
- print $count."\n";
- $dbh->disconnect;
- print "hello\n";
-> 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 声明的变量,它会变得像一个词法变量一样,
其实这也是 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:
{} 中的 “ 需要加入\ 转义