STYLE.PERL(7)

名称
style.perl - FreeBSD Perl ソースファイルのスタイルガイド

解説
このファイルは FreeBSD ソースツリーの perl スクリプトに好ましいスタイルを明記しています。

    #
    # Perl のためのスタイルガイドです。カーネルのスタイルガイドに基づいています。
    #
    #
    # とても重要な 1 行のコメントはこのようにします。
    #
    # ほとんどの 1 行コメントはこのようにします。
    # 複数行にわたるコメントはこのようにします。実際の文章を書きます。実際の
    # 段落に見えるように埋めていきます。

全てのスクリプトにはスクリプトの先頭に著作権ブロックと、 そのスクリプトが何をするものなのかを記述したコメントブロックを置くべき です。

    #!/usr/bin/perl -w
    # 著作権
    # ブロック
    # このスクリプトは標準入力から古いカーネル設定ファイルを読み込み、
    # 標準出力に新しい形式のヒントファイルを出力します。

全てのスクリプトは strict(3) モジュールを使用して警告なしに動作しなければいけません。例えば、 次のようにします:

    #!/usr/bin/perl -w
    # 著作権、スクリプトの内容記述、その他
    use strict;
    ...

可能な場所ではスクリプトを taint (汚染) モードにして 動作させてください。このことは perlsec(1) で文書化されています。

    #!/usr/bin/perl -wT

メインプログラムは MAIN: とラベルされたブロックに置くべきです。 これにより大きな perl スクリプトで開始点を識別するのが容易になり、 またメインプログラムだけで使用される変数に対してスコープを与えます。

    MAIN:{
    	print(foo("/usr/bin/man", "7", "style.perl"));
    	exit(0);
    }

全てのサブルーチンは perlsub(1) で定義されているようなプロトタイプ引数を使用して定義するべきです。

    sub foo($@) {
    	my $cmd = shift;
    	my @args = @_;
    }

全ての変数は使用する前に定義するべきです。これは use strict 下で利用する場合は強制されます。

ローカル変数のスコープの定義には local $variable ではなく my $variable を用いるべきです。 local 宣言はそれが必要とされる場面にのみ使用し、デフォルトでは使用すべきでは ありません。 たくさんの perl4 スクリプトでは、 my 定義が perl5 以前には存在しなかったという理由で local を使用しています。

多くの場合、グローバル変数はコードの先頭で vars(3) 定義ブロックを使用して定義するべきです:

    use vars qw($globalscalar @globalarray %globalhash);

場合によってはスクリプトの先頭で vars(3) 宣言ではなく my 文を用いるのが適していることもあります。

全ての変数にはコメントをつけるべきです。

    sub foo($@) {
    	my $cmd = shift;	# 実行するコマンド
    	my @args = @_;		# $cmd への引数
    }

ローカル変数は空行によって関数の引数と分離するべきです:

    sub foo($@) {
    	my $cmd = shift;	# 実行するコマンド
    	my @args = @_;		# command への引数
    	my $pid;		# 子の PID
    	local *PIPE;		# パイプ
    	my $output;		# コマンドからの出力
    }

可能な時にはいつでも、 コードはコードチェッカ perl -wc script.pl または perl -wcT script.pl を通過させてください。そのとき、警告が生成されてはいけません。

インデントは 8 文字のタブです。 第 2 レベルのインデントは 4 文字のスペースです。

    while (cnt < 20) {
    	z = a + really + long + statement + that + needs +
    	    two lines + gets + indented + four + spaces +
    	    on + the + second + and + subsequent + lines.
    }

空白文字を行末に追加してはいけません。 また、インデントを形成するために、スペースの前にはタブのみを使用して ください。 タブが生み出す以上のスペースおよびタブの前にスペースを使用しては いけません。

ブレースの開始は制御行の最後に置かれます。 else と elsif は直前の if または elsif ブロックの終了ブレースと 同じ行に置かれます:

    sub foo($@) {
    	my $cmd = shift;            # 実行するコマンド
    	my @args = @_;              # コマンドへの引数
    	my $pid;                    # 子の PID
    	local *PIPE;                # パイプ
    	my $output;                 # コマンドからの出力
    	unless (defined($pid = open(PIPE, "-|"))) {
    		die("open(): $!\n");
    	} elsif ($pid == 0) {
    		exec($cmd, @args);
    		die("exec(): $!\n");
    	}
    	$output = "";
    	while (<PIPE>) {
    		$output .= $_;
    	}
    	waitpid($pid, 0);
    	if ($? & 0xff) {
    		die("$cmd caught a signal " . ($? & 0x7f) . "\n");
    	} elsif ($?) {
    		die("$cmd returned exit code " . ($? >> 8) . "\n");
    	}
    	return $output;
    }

可能な場所では、スクリプトは標準モジュールを使用し、 コードをその場に書き直してはいけません。 このことを促進するために、 CPAN モジュールを基本システムに 取り込むことが適している場合があるかもしれません。

適切な所では、 chop ではなく chomp を使用してください。

可読性が増す場合には if (! ...) ではなく unless を使用してください。

このガイドに矛盾しない範囲で perlstyle(1) を読んで Larry Wall の推奨スタイルを採用してください。

関連項目
perlsec(1), perlstyle(1), style(9)

歴史
このマニュアルページは、 FreeBSD の style(9) マニュアルページに大きく基づいています。