当前位置: 首页 > 文档资料 > Perl 入门教程 >

编码标准(Coding Standard)

优质
小牛编辑
127浏览
2023-12-01

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

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

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

  • 4-column indent.
  • 如果可能,在与关键字相同的行上打开卷曲,否则排队。
  • 在多行BLOCK开放卷曲之前的空间。
  • 单行BLOCK可以放在一行,包括curlies。
  • 分号前没有空格。
  • “短”单行BLOCK中省略了分号。
  • 大多数运算符的空间。
  • “复杂”下标周围的空间(括号内)。
  • 做不同事情的块之间的空白行。
  • Uncuddled elses.
  • 函数名称与其左括号之间没有空格。
  • 每个逗号后的空格。
  • 运算符后除去长行(和和之外)。
  • 在当前行上的最后一个括号匹配后的空格。
  • 垂直排列相应的项目。
  • 只要清晰度不受影响,省略多余的标点符号。

以下是一些其他更具实质性的风格问题:只是因为你能做某事特定的方式并不意味着你应该这样做。 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)。 考虑放弃你的代码。 考虑改变你的整个世界观。 考虑一下......哦,没关系。

  • 始终如一。

  • 对人好点。