Perl - 编码标准

当然,每个程序员在格式化方面都有自己的偏好,但有一些通用的指导方针可以让您的程序更易于阅读,理解和维护.

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

关于代码的美学布局,Larry唯一关心的是多线的结束大括号BLOCK应该与启动构造的关键字对齐.除此之外,他还有其他不那么强烈的偏好;

  • 4栏缩进.

  • 在关键字的同一行打开卷曲,如果可能,否则排成一行.

  • 多行BLOCK开始卷曲前的空格.

  • 单行BLOCK可以放在一行上,包括curlies.

  • 分号前没有空格.

  • "short"中省略了分号"单行BLOCK.

  • 大多数运营商周围的空间.

  • "复杂"下标周围的空格(括号内).

  • 执行不同操作的块之间的空白行.

  • 不可用的elses.

  • 函数名与其左括号之间没有空格.

  • 每个逗号后面的空格.

  • 在运算符后除去长行(和和或).

  • 在当前行上最后一个括号匹配后的空格.

  • 垂直排列相应的项目.

  • 省略冗余punc只要清晰度不受影响,就可以了.

这里还有一些其他更实质性的风格问题需要考虑:因为你可以用特定的方式做某事并不意味着你应该这样做. 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())或`backticks`,也就是说,当你抛出时远离他们的回报价值.这些函数都有返回值,因此请使用它们.否则使用foreach()循环或system()函数.

  • 为了便于携带,当使用可能无法在每台机器上实现的功能时,请测试在eval中构造以查看它是否失败.如果您知道实现了特定功能的版本或补丁级别,则可以测试$](英语为$ PERL_VERSION)以查看它是否存在.当安装Perl时,Config模块还允许您查询由Configure程序确定的值.

  • 选择助记符标识符.如果你不记得什么是助记符,你就会遇到问题.

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

  • 包名称有时是此规则的一个例外. Perl非正式地保留了"pragma"模块的小写模块名称,如integer和strict.其他模块应以大写字母开头并使用大小写,但可能没有下划线,原因是原始文件系统将模块名称表示为必须适合几个稀疏字节的文件.

  • 如果你有一个非常多毛的正则表达式,请使用/x修饰符并放入一些空格,使其看起来不像线条噪音.当regexp有斜杠或反斜杠时,不要使用斜杠作为分隔符.

  • 始终检查系统调用的返回码.好的错误消息应该转到STDERR,包括导致问题的程序,失败的系统调用和参数是什么,以及(非常重要)应包含出错的标准系统错误消息.这是一个简单但足够的例子和减号;

opendir(D, $dir) or die "can't opendir $dir: $!";


  • 考虑可重用性.为什么当你想要再做一次这样的事情时,为什么会浪费智力?考虑概括您的代码.考虑编写模块或对象类.考虑使用use strict使代码运行干净,并使用有效的警告(或-w).考虑放弃你的代码.考虑改变你的整个世界观.考虑......哦,没关系.

  • 保持一致.

  • 好看.