Perl - 编码标准


当然,每个程序员在格式方面都有自己的偏好,但是有一些通用准则可以使您的程序更易于阅读、理解和维护。

最重要的是始终在 -w 标志下运行程序。如果必须的话,您可以通过 no warnings pragma 或 $^W 变量显式关闭代码的特定部分。您还应该始终在 use strict 下运行或知道不这样做的原因。使用 sigtrap 甚至使用诊断编译指示也可能有用。

关于代码布局的美观性,Larry 唯一强烈关心的是多行 BLOCK 的右大括号应该与开始构造的关键字对齐。除此之外,他还有其他不那么强烈的偏好 -

  • 4 列缩进。
  • 如果可能的话,在与关键字相同的行上打开卷曲,否则排队。
  • 多行 BLOCK 的起始卷曲之前的空格。
  • 一行 BLOCK 可以放在一行上,包括花括号。
  • 分号之前没有空格。
  • “短”单行 BLOCK 中省略分号。
  • 大多数操作员周围的空间。
  • “复杂”下标周围的空格(括号内)。
  • 执行不同操作的块之间的空行。
  • 不被拥抱的其他人。
  • 函数名称与其左括号之间没有空格。
  • 每个逗号后面有空格。
  • 长行在运算符后断开(and 和 or 除外)。
  • 当前行最后一个括号匹配后的空格。
  • 将相应的项目垂直排列。
  • 只要不影响清晰度,就可以省略多余的标点符号。

以下是一些需要考虑的其他更实质性的风格问题: 仅仅因为您可以以特定方式做某事并不意味着您应该这样做。Perl 旨在为您提供多种执行任何操作的方法,因此请考虑选择最具可读性的一种。例如 -

open(FOO,$foo) || die "Can't open $foo: $!";

优于 -

die "Can't open $foo: $!" unless open(FOO,$foo);

因为第二种方式将语句的要点隐藏在修饰符中。另一方面,

print "Starting analysis\n" if $verbose;

优于 -

$verbose && print "Starting analysis\n";

因为重点不在于用户是否输入了 -v。

当 Perl 提供最后一个操作符以便您可以在中间退出时,不要通过愚蠢的扭曲来退出顶部或底部的循环。只需“突出”一点以使其更加明显 -

LINE:
for (;;) {
   statements;
   last LINE if $foo;
   next LINE if /^#/;
   statements;
}

让我们看看更重要的几点 -

  • 不要害怕使用循环标签——它们可以增强可读性并允许多级循环中断。请参阅前面的示例。

  • 避免在 void 上下文中使用 grep() (或 map())或“反引号”,也就是说,当您丢弃它们的返回值时。这些函数都有返回值,所以使用它们。否则请使用 foreach() 循环或 system() 函数。

  • 为了可移植性,当使用可能无法在每台机器上实现的功能时,请在 eval 中测试该构造以查看它是否失败。如果您知道某个特定功能实现的版本或补丁级别,您可以测试 $] (英文为 $PERL_VERSION)以查看它是否存在。Config 模块还可以让您询问安装 Perl 时由Configure 程序确定的值。

  • 选择助记符标识符。如果你记不住助记符的含义,那么你就有问题了。

  • 虽然像 $gotit 这样的短标识符可能没问题,但使用下划线来分隔较长标识符中的单词。通常,$var_names_like_this 比 $VarNamesLikeThis 更容易阅读,特别是对于非英语母语者而言。这也是一个与 VAR_NAMES_LIKE_THIS 一致工作的简单规则。

  • 包名称有时是此规则的例外。Perl 非正式地为“pragma”模块(如整数和严格)保留小写模块名称。其他模块应以大写字母开头并使用混合大小写,但可能没有下划线,因为原始文件系统将模块名称表示为必须适合几个稀疏字节的文件的限制。

  • 如果您有一个非常复杂的正则表达式,请使用 /x 修饰符并放入一些空格,使其看起来不像线条噪音。当您的正则表达式包含斜杠或反斜杠时,请勿使用斜杠作为分隔符。

  • 始终检查系统调用的返回码。好的错误消息应该发送到 STDERR,包括哪个程序导致了问题、失败的系统调用和参数是什么,并且(非常重要)应该包含出现问题的标准系统错误消息。这是一个简单但足够的例子 -

opendir(D, $dir) or die "can't opendir $dir: $!";
  • 考虑可重用性。当您可能想再做一次类似的事情时,为什么要在一次尝试上浪费脑力呢?考虑概括您的代码。考虑编写一个模块或对象类。考虑使用 use strict 和 use warnings(或 -w)来让你的代码干净地运行。考虑放弃您的代码。考虑改变你的整个世界观。考虑一下……哦,没关系。

  • 始终如一。

  • 对人好点。