Perl スタイルガイド

1.オススメのスタイル

条件式の書き方

if ( 1 ){
    $value = '*****'; # タブでインデントしている
}

用語
インデント
字下げ
タブ
テキスト編集の際に[Tab]キーを押したときのスペース文字

1行文の書き方

if ( 1 ){ $flg = 1 }

式の書き方

$result2 = $p + 1000 / 2;

%hash = (
    A, 1000,
    B, 1001,
    C, 1002,
    D, 1003
);

読みやすい書き方

open( FH, "<$text");
while( <FH> ){
    print $_;
}
close( FH );

if ( $value1 eq 'MEN' ) {
    print "good by!\n";
} else {
    print "welcom!\n";
}

sub display_msg {
    ( $value1, $value2 ) = @_;

    if ( $value1 / 10000000 + 2000000000 >
        $value2 / 10000000 + 2000000000 ){
        return 0;
    }
    return 1;
}

sub function{
    my  $a = 10;
    my $b = 20;
    my ($word, $cnt);

    ....
}

2.オススメのプログラミング作法

Perlに警告してもらう

常にプログラムを-wフラグを指定して実行しましょう。 もし必要なら、$^W変数を使って、プログラムの特定の部分について、 警告をオフにすることができます。また、常に use strictを指定するようにしましょう。

#! /usr/local/bin/perl -w

use strict;
.....

同じものを改めて作らない

プログラミングの最中に、同じような処理を行う箇所に気づくことがあります。 このようなときは、サブルーチンにして切り出すか、 モジュール化を考慮する習慣をつけましょう。

コメントは適切に

コメントを適切に書いておくことは重要です。 コメントを入れる場所としては、プログラムの先頭、サブルーチンの前、 複雑な処理の前がよいでしょう。
ただし、コメント文は多すぎないように気を付けましょう。 コメント文がなくても、すぐに処理内容がわかるようなコーディングを心がけるべきです。

読みやすいスタイルを心がける

 Perl は自由度が高い言語ですから、同じ処理をするにも様々な書き方があります。 どの方法で処理するかは、もっとも読みやすいものを選ぶとよいでしょう。
また、デフォルトの値や省略可能なカッコや記述が様々に用意されていますが、 最初はなるべく使わないようにしましょう。 プログラム作成時は問題なくても、後で修正するときに処理の内容がわからない、 といったことがあります。

ループラベルはお好みで

ループラベルの使用はあまり推奨されていません。 ですが、ループラベルが必要な場合は、使ってもかまわないでしょう。 多重のループからの脱出するためでもありますが、読みやすくなります。 結局のところ、ループラベルを使うか、使わないかは好みの問題です。

正規表現は簡潔に

 複雑な正規表現には、x 修飾子を使って、スペースを入れるなどして、なるべく見やすくしましょう。 正規表現の中にスラッシュやバックスラッシュを使っている時は、 区切文字はスラッシュ以外にし、頻繁なエスケープ処理を避けましょう。

# 少し読みにくいですね
$value =~ /\/home\/httpd\/html\/*\.html/;

# 上記と同様の処理ですが、区切り文字を | にして、エスケープ
# 処理を避けています
$value =~ m|/home/httpd/html/*\.html/;

アンドは"&&"よりも"and"が自然

 論理演算子の && や || といった記号的な演算子よりも、 直感的にわかりやすい "and" や "or" を使いましょう。

連続した print 文

 連続した print() 文がある場合は、変わりにヒアドキュメントを使いましょう。

# 連続した print 文
print "<html>\n";
print "<body>\n";
print "You might win some but you just lost one\n";
print "</body>\n";
print "</html>\n";

# 上記と同様の処理ですが、ヒアドキュメントを使っています
print <<EOF;
<html>
<body>
You might win some but you just lost one
</body>
<html>
EOF

クォートを含む文字列に対しては qq// を使う

 クォートを含む文字列をクォートで囲むためには、 バックスラッシュ( / )でエスケープする必要があります。 このような場合は、q//、qq//、qx//を代わりに使うようにしましょう。

# 同様の処理ですが、qq//を使ったほうが見た目がいいですね
$word = "Look at your career they said,\"Baby use your head\"";
$word = qq{Look at your career they said,"Baby use your head"};

浮動小数点を信頼しない

ほとんどのコンピュータでは、浮動小数点は近似値になります。 たとえば、10を3で割ると「3.3333...」と無限に続きますが、 コンピュータは値を保存する領域に制限があるので、 途中で3の繰り返しをストップさせます。
末桁まで正確であることを前提にしてプログラミングを行うと、 致命的な問題に直面します。金額などを扱う場合などは、特に注意しましょう。

セキュリティの問題

 システムコールとバッククォーテーション操作の戻り値は、 なるべくチェックするようにしましょう。

移植性を高める秘訣

 移植性のため、すべてのマシンで利用できない機能を使う場合には、 eval の中で使ったほうが安全です。

再利用性を高める秘訣

再利用性を考えましょう。何も考えずに作成するほうが簡単ですが、 あとで簡単に再利用できるように作成しておいたほうが、 長い目で見て作業が楽になります。

3.処理スピードを速くする!

if ( $a ){
    $value = $a;
} elsif ( $b ){
    $value = $b;
} elsif ( $c ){
    $value = $c;
}

4.空間の効率を上げる!