Go to the previous, next section.
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 で % キーを押すかもしれない。(?)
When in doubt, parenthesize. At the very least it will let some poor schmuck bounce on the % key in vi.
あやふやでない時でも、 君の後を継いでコードのメンテナンスをしなければならない人物の 精神福利を考えよう。彼はおそらく誤った所に括弧をつけるだろう。
perl は真ん中から抜けられるように `last' 宣言子を用意している。 見易くするため、インデントを少し少なくしよう。
line:
for (;;) {
statements;
last line if $foo;
next line if /^#/;
statements;
}
loop ラベルを使え ---
ラベルは多重ループから抜けるためだけでなく、
より読み易くするためにある。一つ前の例を見よ。
eval 構造の中でそれが失敗するかどうかテストせよ。
ある機能が
どのバージョン、どのパッチレベルでインプリメントされたかが分かっているなら、
$] を使ってその機能があるかどうかを調べることができる。
Go to the previous, next section.