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漂亮的地方在于,对于绝大多数常用的数据库,其接口都是一样的,从 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是一个表达式(不是像whileforeach那样的控制结构),因此结
尾处的分号是必须的。

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

0 0
原创粉丝点击