Perl学习笔记(三)
来源:互联网 发布:怎样申请淘宝直播间 编辑:程序博客网 时间:2024/06/05 05:27
第十五章:Perl模块
Q1:什么是Perl模块,它主要包括哪些?各模块主要的作用是什么?如何使用?
答:Perl模块跟JAR包,C库一样,是具有特定用途的程序,可供开发者直接调用,可通过如下语句查找某一模块是否已经安装:
$perldocCGI
需要Perl发布包中没有的模块,可以在CAPN上:http://search.cpan.org,或kobes’上:http://kobesearch.cpan.org◆查找。
[1]数据库和DBI
DBI(数据库接口 (databaseinterface))模块不是 Perl默认附带的,但它是最常用的模块之一,因为大多数用户都需要连接到某种类型的数据库上。 DBI漂亮的地方在于,对于绝大多数常用的数据库,其接口都是一样的,从 csv(comma-separatedvalue)文件到大型的数据库服务器如 Oracle。它有 ODBC的驱动程序,某些驱动程序是由厂商提供的。想了解全面的详细信息,可以参见 Perl DBI编程(Porgramming the Perl DBI)( O’ Reilly)。也可以查看 DBI的网站: http://dbi.perl.org/。当安装了 DBI后,也需要安装 DBD(数据库驱动程序(databasedriver))。从 CPAN上搜索 DBD,会返回一长串的结果。根据数据库服务器,及其版本安装正确的数据库驱动程序。DBI是一个 OO 模块,但不需要完全了解 OO编程之后才开始使用它;根据文档中的例子就可以开始了。要连接数据库,需要use DBI模块,并调用connect方法。下面展示如何连接PostgreSQL数据库
useDBI;
$dbh = DBI->connect($data_source, $username, $password);
my$data_source = “dbi:Pg:dbname=name_of_database”;
$sth= $dbh->prepare(“SELECT * FROM foo WHERE bla”);
$sth->execute();
@row_ary= $sth->fetchrow_array;
$sth->finish;
$dbh->disconnect();
第十六章:部分Perl高级技术
Q1:Perl还有哪些常用高级技术?
答:
[1]利用eval捕获错误
(1)eval是一个表达式(不是像while或foreach那样的控制结构),因此结
尾处的分号是必须的。
(2)当执行eval块时发生了通常的严重错误,eval块会停止执行,但程序不会崩溃。当eval结束时,你想知道它是正常结束的,
还是发生了严重错误。这些结果放在特殊变量$@之中。如果eval为你捕捉了严重错误,则$@中将有程序失败的原因,可
能如:Illegal division by zero atmy_program line 12。如果没有错误,则$@为空。这意味着$@是一个有用的Boolean(true/false)
值(真,表示有错误)
(3)eval块是真正的一个块,因此其中可以有新的局部(my)变量。
(4)如果eval捕捉到了严重错误,则返回值为undef或空列表,依赖于其context。
foreachmy $person (qw/ fred wilma betty barney dino pebbles /) {
eval {
open FILE, “<$person”
or die “Can’ t open file ‘$person’: $!”;
my($total, $count);
while (<FILE>){
$total += $_;
$count++;
}
my $average = $total/$count;
print “Average for file $person was $average\n”;
&do_something($person, $average);
};
if ($@){
print “An error occurred ($@), continuing\n”;
}
}
[2]使用grep得到列表元素
有时只需要列表中的某些项。例如只需要数字列表中的奇数,或者文本中提到Fred的行。如你在本节中将看到的,可以使用grep从列表中得到某些项
my@odd_numbers = grep {$_ % 2} 1 ..1000;
my@matching_lines = grep /\bfred\b/i, <FILE>;
[3] 使用 map对列表项进行变换
另一个通常的操作是,转变列表项的格式。例如,假设你想将一列数字按照货币数字的格式输出,如第十三章的子程序&big_money。我们不想修改原始数据,只想修改一份拷贝的进行输出。
my@data = (4.75, 1.5, 2, 1234, 6.9456, 12345678.9, 29.95);
my @formatted_data = map {&big_money($_) } @data;
[4] Slices
通常,我们只需处理列表中的部分元素。
slice 的下标可以是任意的序列,甚至可以是重复的。下例将具有十个元素的列表中的五个元素取出:
my@names = qw{ zero one two three four five six seven eight nine };
my @numbers = ( @names)[ 9, 0, 2, 1, 0 ];
print “Bedrock @numbers \n”; #输出 Bedrock nine zero two one zero
- Perl学习笔记(三)
- perl学习笔记三----操作符
- perl学习笔记三----操作符
- perl入门笔记(三)
- perl学习(三)
- Perl学习(三)
- Perl学习笔记三: 再次尝试优化文件I/O
- perl学习笔记(三)——语法
- Perl学习笔记
- perl学习笔记
- perl 学习笔记
- perl语言学习笔记
- Perl学习笔记(1)
- Perl学习笔记(2)
- Perl学习笔记(3)
- Perl学习笔记(4)
- Perl学习笔记(5)
- Perl学习笔记-1
- python自学之文件
- Java归并算法递归实现
- No5 触摸事件
- Kaptcha生成验证码
- protocol buffer语法
- Perl学习笔记(三)
- php数据库编程:利用mysql扩展库操作数据库。
- 判断两个字符串是否为兄弟字符串
- hdu2181C - 哈密顿绕行世界问题
- Cocos2d-JS使用log方法控制台无法打印出结果
- DP-POJ-1458-Common Subsequence
- hdu acm 1548 A strange lift
- ImageNet大规模视觉识别竞赛 ILSVRC 2015 尝鲜数据集
- 软件架构师应该知道的97件事之概括76-90