【Perl】色んな方法で複数行コメントを書く


Perl のスクリプト中に書けるコメントは、通常一行コメントのみであるが、擬似的に複数行コメントを実現する方法もいくつかある。

# これはコメントです。
# これはコメントです。

1. POD を使う。

=begin
これはコメントです。
これはコメントです。
=end
=cut

文字数多くてめんどくさい、と言うものぐさな人には、

=cut
これはコメントです。
これはコメントです。
=cut

これでも問題なく動く。(ただし、正式な書式ではない)

2. ヒアドキュメントで文字列化する。

<<END_OF_COMMENT;
これはコメントです。
これはコメントです。
END_OF_COMMENT

ヒアドキュメントとは UNIX シェル由来の記法で、“<<”演算子の後に続いた文字列が再び現れるまでを一つの文字列として扱うときに使う(あくまで“文字列”であるから文の終わりを示すセミコロンが必要だ。)。これは "……" と等価なので、そのままだと変数展開が行われる。それを避けるなら、

<<'END_OF_COMMENT';
これはコメントです。
これはコメントです。
END_OF_COMMENT

のように、開始文字列を '……' で括ればよい。更に応用として、

<<'';
これはコメントです。
これはコメントです。

1;

開始文字列を空文字列にすると、空行が現れるまでが全て一つの文字列(コメント)になる。一段落限定という制限はあるが、これが複数行コメントとしては一番簡潔な表記だろう。

3. if 文で強制的に評価しないようにする。

2. の方法は単独の文字列のみで文が構成されるために、use warnings 環境だと警告文が現れる。

use warnings;
<<'';
これはコメントです。
これはコメントです。

1;
# 実行例
$ perl test_comment.pl
Useless use of a constant in void context at testComment3.pl line 2.

これを避けるなら、if を使って強制的に評価させないようにする。

use warnings;
if(0){<<'';
これはコメントです。
これはコメントです。

}

4. Acme::Comment モジュールを使う。

1.~3. は所詮本物のコメントではないので副作用があって使いにくい。そこでソースフィルタを使っていろんな言語の複数行コメント書式を利用可能にしてしまうモジュールがこれ。

Acme::Comment – search.cpan.org
http://search.cpan.org/~bingos/Acme-Comment-1.04/lib/Acme/Comment.pm

参考 : Perl 言語自身すら拡張する Filter 機能をお勉強 :: Drk7jp
http://www.drk7.jp/MT/archives/001374.html

{
    package Test1;
    use Acme::Comment;
    /*
    これはコメントです。
    これはコメントです。
    */
    1;
}
{
    package Test2;
    use Acme::Comment type => "BASIC";
    ' これはコメントです。
    ' これはコメントです。
    1;
}
{
    package Test3;
    # BASIC や MS-DOS の一行コメント
    use Acme::Comment single => "REM";
    REM これはコメントです。
    REM これはコメントです。
    1;
}
{
    package Test4;
    # TT2 の複数行コメント
    use Acme::Comment start => "[%#", end => "%]", own_line => 0;
    [%# これはコメントです。
        これはコメントです。%]
    1;
}

いくつか例を挙げてみた。何もオプションを指定しない場合(Test1)は、C スタイルの複数行コメントが使えるようになる。様々な言語を指定することも出来る(Test2)し、好きな一行コメント(Test3)や複数行コメント(Test4)を自分で作ることも出来る。

こんな風に、足りない機能は文法自体をいじることで実現できてしまうのは Perl の強みだ。しかし、自分以外には読めないスクリプトになってしまう恐れもあるので多用は控えよう。

コメントを残す