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;

}

while($min < $max) {

my$try = ($max - $min) / 2;

if($value[$try] < $target) {

$max= $try;

}

Else {

$min= $try;

}

}

零零叁.

不要把子程序或变量名称与后继开口括号分割开来。

即:

[email protected] = get_candidates($marker);

CANDIDATE:

formy $i (0..$#candidates) {

nextCANDIATE if open_region($i);

$candidates[$i]

=$incumbent{ $candidates[$i]{region} };

}

零零肆.

不要对内置函数和“名誉”内置函数使用不必要的小括号。

即:

while(my $record = <$results_file>) {

chomp$record;

my($name, $votes) = split “\t”, $record;

print‘Votes for ’,

substr($name,0, 10),           # 为强加优先级所以需要小括号

“:$votes (verified)\n”;

}

零零伍.

把复杂的键或索引与周围的括号分开来。

例如:

$candidates[$i]= $incumbent{ $candidates[$i]{ get_region() } };

零零陆.

利用空白让二元运算符相对于其操作数更醒目。

例如:

my $displacement

=$initial_velocity * $time + 0.5 * $acceleration * $time**2;

零零柒.

每条语句之后都放分号。

例如:

while (my $line = <>) {

chomp$line;

if( $line =~ s{\A (\s*) – (.*)}{$1#$2}xms ) {

[email protected], $2;

}

Print$line;

}

零零捌.

多行列表中的每个值后面都放逗号。

例如:

my @dwarves = (

‘Happy’,

‘Sleepy’,

‘Sneezy’

);

零零玖.

使用78列的代码行。

因为印刷文件、旧式VGA显示设备、展示软件和应用光学没有解除这些限制,以大于80列的宽度作为代码的格式安排并不合理。

零壹零.

使用4列缩排层次。

零壹壹.

以空格缩排,不要以制表符(tab)缩排。

零壹贰.

绝不要把两条语句放在同一行。

零壹叁.

代码要分段落。

零壹肆.

不要紧贴着else。

“紧贴的”else看起来像这样:

} else {

正确的:

}

else{

零壹伍.

垂直对齐相对应的项目。

例如:

$name     =standardize_name($name);

$age        =time - $birth_date;

$status    =‘active’;

零壹陆.

在运算符之前断开冗长表达式。

例如:

push @steps, $steps[-1]

+$radial_velocity * $elapsed_time

+$orbital_velocity * ($phase + $phase_shift)

-$DRAG_COEFF * $altitude

;

零壹柒.

把语句中间的冗长表达式分离出来。

例如:

my $next_step = $steps[-1]

+$radial_velocity * $elapsed_time

+$orbital_velocity * ($phase + $phase_shift)

-$DRAG_COEEF * $altitue

;

add_step ( \@steps, $next_step,$elapsed_time );

零壹捌.

一定要在最低可能优先级的运算符之处断开冗长表达式。

例如:

push @steps, $steps[-1]

+$radial_velocity * $elapsed_time

+$orbital_velocity

*($phase + $phase_shift)

-$DRAG_COEFF * $altitude

;

零壹玖.

在赋值运算符前断开冗长的赋值运算。

例如:

$predicted_val{$current_data_set}[$next_iteration]

=$average + $predicted_change * $fudge_factor;

零贰零.

以列安排级联三元运算符。

例如:

my $name = defined $customer{name} ?$customer{name}

:                                         ‘Sir or Madam’

;

零贰壹.

冗长列表要加小括号。

例如:

print (

‘Processing’,

Scalar(@items),

‘items at ’,

time,

“\n”

);

零贰贰.

机械式地执行你所选择的部署风格。

Perl有可用的格式化工具:perltidy。

网址:http://perltidy.sourceforge.net

时间: 2024-12-22 06:59:30

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

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 最佳实践(节选) --- 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 最佳实践(节选) --- 13

第十三章:错误处理 壹陆玖. 要抛出异常,不要返回特殊值或设定标记. 壹柒零. 让失败的内置函数也抛出异常. 壹柒壹. 让所有上下文中的失败都是致命失败. #把不可接受的失败行为改为抛出异常 -- useFatal qw( :void locate_and_open); #稍后 -- formy $filename () { my$fh = locate_and_open($filename); my$head = load_header_from($fh); print$head; } 壹柒贰

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

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