Perl 最佳实践(节选) --- 13

第十三章:错误处理

壹陆玖.

要抛出异常,不要返回特殊值或设定标记。

壹柒零.

让失败的内置函数也抛出异常。

壹柒壹.

让所有上下文中的失败都是致命失败。

#把不可接受的失败行为改为抛出异常 ……

useFatal qw( :void locate_and_open);

#稍后 ……

formy $filename () {

my$fh = locate_and_open($filename);

my$head = load_header_from($fh);

print$head;

}

壹柒贰.

测试system内置函数的失败时要当心一点。

usePOSIX qw ( WIFEXITED);

#稍后……

WIFEXITED(system$cmd)

Orcroak “Couldn’t run: $cmd ($OS_ERROR)”;

壹柒叁.

对所有失败都抛出异常,包括可复原的失败。

TRY:

formy $try (1..$MAX_TRIES) {

#如果资源成功地取得,就完成了……

eval{

$resource= acquire_resource($resource_id);

LastTRY;

};

#如果不再尝试,就报告不可复原的失败

croak($EVAL_ERROR ) if $try == $MAX_TRIES;

#不然就在随机拉长的时间间距后再试一次……

nap(rand fibonacci($try)  );  ghd

}

do_something_using($resource);

壹柒肆.

从调用者的位置报告异常,而不要从抛出异常之处报告。

壹柒伍.

以接收者的方言编写错误消息。

壹柒陆.

以接收者的方言替每条错误消息编写说明文档。

壹柒柒.

每当失败数据必须传给处理程序时,就使用异常对象。

壹柒捌.

当错误消息可能改变时,就应使用异常对象。

壹柒玖.

当两个或多个异常彼此相关时,就应使用异常对象。

壹捌零.

以MDF(most-derived-first,最底层的派生为先)次序捕获异常对象。

壹捌壹.

自动建立异常类。

壹捌贰.

取出扩展的异常处理程序内的异常变量。

时间: 2024-07-30 01:16:52

Perl 最佳实践(节选) --- 13的相关文章

Perl 最佳实践(节选) --- 01

写在篇首: -------------------------------------------------------------------------------------- 此系列是Perl Best Practices的学习节选! 有兴趣的朋友可以使用邮箱和我沟通!(非常欢迎你的交流) 我的邮箱: veic_2005#163.com(把#替换为@) ------------------------------------------------------------------完

Perl 最佳实践(节选) --- 04

第四章:值和表达式 数据是缺乏生气的-- 有点像程序员. - Arthur Norman 零叁叁. 只对实际会插入的字符串使用插入用字符串界定符. l        创建字符串直接量而且想插入变量,使用双引号括住的字符串 my $spam_name = "$title$first_name $surname"; l        创建字符串直接量而且不想插入任何变量,使用单引号括住的字符串 my $spam_name = 'DrLawrence Mwalle'; l        如果

Perl 最佳实践(节选) --- 03

第三章:命名惯例 零贰叁. 构成标示符时要使用文法模板. l        变量以名词命名,前面不加或再加上多个形容词: variable → [adjective _ ]* noun l        hash和数组: look-variable → [adjective _ ]* noun preposition 零贰肆. 根据相关测试替布尔值命名. 零贰伍. 把存储引用的变量标上_ref后缀. 零贰陆. 数组以复数命名,而散列以单数命名. Perl有可用的格式化工具:perltidy. 网

Perl 最佳实践(节选) --- 17

第十七章:模块 贰壹柒. 先设计模块的接口. 贰壹捌. 把原有代码变成inline. 把重复的代码放到子程序. 把重复的子程序放到模块. 贰壹玖. 使用三部分式的版本编号. 贰贰零. 程序化地实施你的版本需求. 贰贰壹. 明智地导出且只在可能场合有请求时才导出. 贰贰贰. 考虑以声明方式导出. 贰贰叁. 不要把变量变成模块接口的一部分. 贰贰肆. 自动建立新模块框架. 贰贰伍. 尽可能使用核心模块. 贰贰陆. 可行时就使用CPAN模块. 第十八章:测试和调试 贰贰柒. 先写测试案例. 贰贰捌.

Perl 最佳实践(节选) --- 18

第十八章:测试和调试 贰贰柒. 先写测试案例. 贰贰捌. 以Test::Simple或Test::More把你的测试案例标准化. 贰贰玖. 利用Test::Harness将你的测试集标准化. 贰叁零. 编写失败的测试案例. 贰叁壹. 可能的和不可能的都要经过测试. 贰叁贰. 开始测试前先增加新的测试案例. 贰叁叁. 一定要使用use strict. 贰叁肆. 一定要显式地开启警告功能. 贰叁伍. 绝不要假设编译期间没有警告就意味着正确. 贰叁陆. 显式而选择性地关闭责难(stricture)或警

Perl 最佳实践(节选) --- 02

第二章:代码部署 零零壹. 以K&R风格表示大括号和小括号. 即: my @name = ( 'Damian', 'Matthew' ); for my $name (@names) { formy $word ( anagrams_of(lc $name) ) { print"$wor\n"; } } 零零贰. 控制关键字和后继开口括号间要以空白分割 例如: formy $result (@results) { print_sep(); print$result; } whi

Perl 最佳实践(节选) --- 12

第十二章:正则表达式 正则表达式就是子程序.就是文本匹配子程序. 壹肆伍. 一定要用/x标记. 壹肆陆. 一定要用/m标记. 壹肆柒. 以\A和\z作为字符串边界锚点(anchor). #删除前后空白-- $text=~ s{\A \s* | \s* \z}{}gxm; 壹肆捌. 使用\z表示"字符串末尾",不要用\Z. Perl提供\z标示符号的变形版本:\Z.但是,小写\z是指"匹配字符串末尾",而大写\Z是指"匹配可有可无的换行字符,然后是字符串末尾

Perl 最佳实践(节选) --- 06

第六章:控制结构 零陆贰. 使用代码块if,不要使用后缀if. 例如,下面的就不好理解: $sum+= $measurement if defined $measurement; 其实,它等于: if(defined $measurement) { $sum+= $measurement; } 零陆叁. 后缀if要保留给流程控制语句. 零陆肆. 不要使用unless.for.while.until作为后缀. 零陆伍. 绝对不要使用unless或until. 零陆陆. 避免C风格的for语句. 零

Perl 最佳实践(节选) --- 07

第七章:说明文档 零捌肆. 区分用户说明文档和技术说明文档. 零捌伍. 替模块和应用程序创建标准POD模板. 零捌陆. 把你的标准POD模板予以扩展和自定义. 零捌柒. 在源代码文件中放置用户说明文档. 零捌捌. 把所有用户说明文档放在源代码文件中的单独的地方. 零捌玖. 尽可能把POD放在靠近文件末尾处. 零捌肆. 对技术说明文档做适当的细化. 零玖零. 主要注释应使用块模板. 零玖壹. 使用整行注释来说明算法. 零玖贰. 使用行尾注释来指出微妙之处和奇怪之处. 零玖叁. 对任何让你困惑或受骗