.
下 儘 量
減 少 標 點 符 號 .
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
| |