.
下 尽 量
减 少 标 点 符 号 .
Larry 这
样 做 当 然 有 他
的 原 因 , 不 过 他
没 有 要 求 别 人
都 和 他 一 样 . 以
下 意 见 供 您 参
考 :
|
• 可 以
那 样 做 并 不 意
味 着 应 该 那 样
做 |
|
. 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。
类 似 的 , 因 为
一 个 操 作 符 允
许 使 用 默 认 参
数 , 不 意 味 着
你 必 须 使 用 默
认 值 。 默 认 值
是 为 懒 惰 的 系
统 程 序 员 书 写
只 运 行 一 次 的
程 序 准 备 的 。
如 果 你 需 要 你
的 程 序 尽 量 可
读 , 考 虑 给 出
参 数 。 根 据 相
同 的 原 则 , 在
很 多 地 方 即 使
你 可 以 忽 略 括
号 也 不 意 味 着
你 应 当 这 样 做
:
return print reverse sort num values %array;
return print(reverse(sort num (values(%array))));如 果 有 疑 义 , 使 用 括 号 。 至 少 它 使 得 可 怜 的 笨 蛋 能 在
vi 中 使
用 % 键 来 跳 转 甚
至 你 没 有 疑 义
的 时 候 , 为 那
个 将 来 维 护 你
的 代 码 的 家 伙
的 精 神 健 康 考
虑 一 下 吧 , 并
且 他 有 可 能 把
括 号 放 错 地 方
。
|
• 在 程
序 中 使 用 |
|
last 跳 出 ,
而 不 要 在 开 始
和 结 束 时 用 奇
怪 的 跳 转 退 出
循 |
环 。 把
它 "缩 出 " 几 格
以 利 于 察 看 :
LINE:
for (;;) {
statements;
last LINE if $foo;
next LINE if /^#/;
statements;}
|
• 别 害
怕 使 用 循 环 标
记 |
|
--它 们 用
来 增 强 可 读 性
并 且 允 许 多 层
循 环 中 断 . 参 见
前 |
例 .
|
• 避 免
在 空 上 下 文 中
使 用 |
|
grep() (或 map()) 或
’反 引 号 ’ , 那
样 , 你 就 丢 弃 |
了 它 们
的 返 回 值 . 使 用
它 们 是 为 了 得
到 返 回 值 , 否
则 , 使 用 foreach() 或
是 system() 好 了 .
|
• 考 虑
移 植 的 时 候 ,
某 些 特 性 可 能
不 是 在 所 有 的
机 器 上 都 能 够
得 到 支 持 , 这 时
可 以 用 |
eval来 测 试
. 如 果 你 知 道 提
供 特 定 功 能 的
版 本 或 是 补 丁 ,
你 可 以 察 看 $]
(也 就 是 "English"
中 的 $PERL_VERSION) 来 确
定 当 前 的 版 本 .
"Config" 模 块 也
会 提 供 perl在 安 装
时 Configure 程 序 测
得 的 值 .
|
• 使 用
明 确 的 标 识 符
, 你 要 是 想 不
起 来 标 识 符 的
意 思 , 那 就 麻
烦 了 。 |
|
• 短 标 识 符 如 |
$gotit 虽
然 没 什 么 不 好 ,
但 是 用 下 划 线
来 分 割 单 词 可
以 增 加 可 读 性 .
如 $var_names_like_this 好 于
$VarNamesLikeThis,对 不 以
英 语 为 母 语 的
人 更 是 如 此 .同
样 , 在 使 用
VAR_NAMES_LIKE_THIS 时 也
要 遵 循 这 个 规
则 。 包 名 称 有
时 不 遵 守 这 个
约 定 . Perl 为 "pragma"
保 留 小 写 的 包
名 称 , 比 如 integer
和 strict. 其 他 模 块
名 称 应 该 用 大
写 字 母 开 始 ,
但 是 一 般 不 用
下 划 线 来 分 隔
, 因 为 当 使 用
模 块 名 来 作 文
件 名 时 , 这 在
某 些 系 统 会 出
现 错 误 .
|
• 使 用
大 小 写 可 以 区
分 变 量 的 作 用
域 。 例 如 : |
|
$ALL_CAPS_HERE 常 量 (小 心 ! 不 要 与 perl 变 量 冲 突 !)
$Some_Caps_Here 包 作 用 域 global/static
$no_caps_here 函 数 作 用 域 my() 或 local() 变 量函 数 和 方 法 名 多 用 小 写
. 如 ,
$obj->as_string(). 用 下
划 线 开 始 的 函
数 名 或 变 量 名
, 表 示 该 函 数
或 变 量 只 能 在
定 义 它 的 包 中
使 用 .
|
• 如 果
你 的 正 则 表 达
式 较 复 杂 , 用 |
|
"/x" 来
增 加 注 释 行 或
空 行 以 利 于 阅
读 . 当 |
其 中 有
很 多 斜 杠 或 反
斜 杠 时 , 不 要
用 反 斜 杠 来 作
正 则 表 达 式 的
定 界 符 .
|
• 使 用 |
|
"and" 和
"or" 操 作 符 以 减
少 使 用 括 号 , 尽
量 少 用 && 和
⎪⎪. 调 用 子 |
程 序 时
尽 量 少 用
"&"和 括 号 ,
可 以 把 子 程 序
当 做 函 数 或 列
表 操 作 符 来 调
用 .
|
• 使 用 |
here documents 代 替
大 量 的 print() 语 句 .
句 用 列
对 齐 方 式 来 书
写 , 特 别 是 当
一 行 放 不 下 的
时 候 .
$IDX = $ST_MTIME;
$IDX = $ST_ATIME if $opt_u;
$IDX = $ST_CTIME if $opt_c;
$IDX = $ST_SIZE if $opt_s;
mkdir $tmpdir, 0700 or die "can’t mkdir $tmpdir: $!";
chdir($tmpdir) or die "can’t chdir $tmpdir: $!";
mkdir ’tmp’, 0777 or die "can’t mkdir $tmpdir/tmp: $!";
|
• 总 是
检 测 返 回 值 |
|
. 错 误 信
息 被 送 往 STDERR, 包
括 出 错 的 程 序
、 失 败 的 系 统
调 |
用 及 参
数 、 并 且 ( 非
常 重 要 的 ) 包
括 标 准 错 误 信
息 . 这 里 是 一 个
简 单 而 完 整 的
例 子 :
opendir(D, $dir) or die "can’t opendir $dir: $!";
|
• 把 翻
译 列 表 以 列 对
齐 方 式 排 列 : |
|
tr [abc]
[xyz];
|
• 考 虑
可 重 用 性 |
|
. 请 考 虑
使 用 模 块 或 对
象 . 考 虑 使 用 use strict
和 use |
warnings (或 -w) 使
代 码 清 晰 明 确 .
考 虑 改 变 世 界
观 。
|
• 要 一
致 , 要 兼 容 。 |
|
|
• 要 漂 亮 , 要
美 观 。 |
|
redcandle
<redcandle51 [AT] chinaren.com> 20010530
http://cmpp.linuxforum.net
本 页 面
中 文 版 由 中 文 man
手 册 页 计 划 提
供 。 中 文 man 手 册
页 计 划 :
https://github.com/man-pages-zh/manpages-zh
| |