Perl学习笔记(三)

第十五章:Perl模块

Q1:什么是Perl模块,它主要包括哪些?各模块主要的作用是什么?如何使用?

答:Perl模块跟JAR包,C库一样,是具有特定用途的程序,可供开发者直接调用,可通过如下语句查找某一模块是否已经安装:

$perldocCGI

需要Perl 发布包中没有的模块,可以在CAPN 上:http://search.cpan.org, kobes上:http://kobesearch.cpan.org查找。

[1]数据库和DBI

DBI(数据库接口 (databaseinterface))模块不是 Perl 默认附带的,但它是最常用的模块之一,因为大多数用户都需要连接到某种类型的数据库上。 DBI 漂亮的地方在于,对于绝大多数常用的数据库,其接口都是一样的,从 csvcomma-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高级技术

Q1Perl还有哪些常用高级技术?

答:

[1]利用eval捕获错误

1eval是一个表达式(不是像while foreach 那样的控制结构),因此结
尾处的分号是必须的。

2当执行eval 块时发生了通常的严重错误,eval 块会停止执行,但程序不会崩溃。eval 结束时,你想知道它是正常结束的,
还是发生了严重错误。这些结果放在特殊变量$@之中。如果eval 为你捕捉了严重错误,$@中将有程序失败的原因,
能如:Illegal division by zero atmy_program line 12如果没有错误,$@为空。这意味着$@是一个有用的Booleantrue/false
(真,表示有错误)

3eval块是真正的一个块,因此其中可以有新的局部(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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值