最近在阅读《Perl Best Practices》(Perl最佳实践)这本书。 Damian Conway这这本大作从各个方面 阐述了Perl编程上的一些经验,是Perl编程人员的必读之物。 标题上的PBP即Perl Best Practices的缩写。 鉴于这本书目前还没有中译本,我准备将这本书摘录一些翻译过来, 给各位Perler作为参考。

2.1 括号

使用K&R风格。

建议使用K&R风格,也就是下面这种格式:

for my $name (@names) {
    for my $word ( anagrams_of(lc $name) ) {
        print "$word\n";
    }
}

而不要使用BSD风格和GNU风格:

# 不要使用如下的BSD风格
for my $word ( anagrams_of(lc $name) ) 
{
    print "$word\n";
}

# 也不要使用如下的GNU风格
for my $word ( anagrams_of(lc $name) ) 
  {
    print "$word\n";
  }

K&R风格最大的好处就是它能减少一行代码,这样一屏能显示的代码量能更多。 喜欢BSD或GNU风格的最大理由莫过于它能更清晰地显示代码结构。 而实际上,K&R风格你只要从闭括号向上,遇到实际的代码时即可确定代码结构。

2.2 关键字

流程控制关键字和其后的括号之间要留一个空格。

如下所示,while 和后面的括号之间应当留出一个空格。 这样即可将关键字与一般的子程序调用区分开, 因为调用函数时函数名和参数列表的括号之间没有括号。

# 正确的写法,while后面要加上空格
while ($min < $max) {
    ....
}

# $result和后面的括号之间也要有空格
for my $result (@results) {
    ....
}

# 如果不留空格,看起来就像函数调用一样
while($min < $max) {
    ....
}

2.3 函数调用和变量

函数名和变量名后面不应使用空格。

理由与2.2相同,请看下面的代码。

# 注意get_candidates后面没有空格
# $candidates和[$i]之间也没有空格
my @candidates = get_candidates($marker);
$candidates[$i] = $incumbent{ $candidates[$i]{region} };

# 如果这样写,很容易和流程控制关键字混淆。
my @candidates = get_candidates ($marker);
$candidates[$i] = $incumbent{$candidates [$i] {region}};

2.4 内置函数

内置函数后无需不必要的括号。

Perl的许多内置函数也是有效的关键字,调用时无需使用括号。 这样可以增强代码的可读性,也可以将内置函数与普通的函数调用区分开。

my ($name, $votes) = split "\t", $record;
print "Votes for $name: $votes\n";

万不得已必须使用括号时,应当遵循2.3的规则,将内置函数作为函数调用处理, 即不要加空格:

my ($name, $votes) = split("\t", $record);
print("Votes for $name: $votes\n");

# 不要像下面这样使用空格
my ($name, $votes) = split ("\t", $record);
print ("Votes for $name: $votes\n");