Perl のTips...
デバッグ文の取り扱い
(2000.12.01)

概要

 ソースコード中のデバッグ文をきれいに取り扱う。

適用範囲

Perl 5.005

解説

 Perlのようなインタープリタ言語はいわゆるターンアラウンドが短く てプログラマーにはうれしいものですが、半面、デバッグ文の扱いに困 ります。

 開発途上にはなくてはならないものだし、済めば本質的に不要だし、 でも万が一に備えて(笑)消し去るのは怖い。けっきょくコメントアウ トしておいたりするのですが、複数行に渡るデバッグ文の場合はコメン トで殺したり生かしたりが面倒くさい。

 コンパイラ言語、少なくともCの場合には、プリプロセッサの機能を 使って#ifdef xxx 〜 #else 〜 #endifなんてことができ るし、もっと賢い手もある(あ、これもtipsにしようかな)。

 そこで、ここに紹介する手続きを考えてみました。

コード

  1: sub DEBUG_PRINT
  2: {
  3:     print @_;
  4: }
  5: 
  6: sub DEBUG_LIST
  7: {
  8:     my($title, @list) = @_;
  9: 
 10:     print $title;
 11:     for(@list){
 12:         print $_, "\n";
 13:     }
 14: }

補足

 殆ど何もしていないに等しい手続きですが、呼出し側のコードはこん な風になります。

    ........
    DEBUG_PRINT("some literal string", $variable, $momo, "remark");
    ........
    ........
    DEBUG_LIST("list print", @some_list);
    ........

 手続きDEBUG_PRINTは、普通なら直接print文を書くところを、引数並 びはそのままにして自作手続きに渡してしまいます。手続きを呼び出す 際に変数は評価されますから、DEBUG_PRINTの側では、引数をそのまま ぽんとprintに引き渡せばちゃんと印字されます。

 デバッグ出力が不要になったら、DEBUG_PRINTの中のprint文ひとつを コメントアウトすれば、DEBUG_PRINTに渡したすべてのデバッグ文はき れいに出力されなくなります。

 DEBUG_LISTはちょっと感じが違いますが、やりたいことはまぁ同じ。 この辺はもっと凝ったことをできるでしょう。
 凝れば凝るほど、コメント記号をつけたり外したりするのが面倒にな りますが、手続き一個ならたかが知れたものです。

 手を入れる量を最小にするなら、デバッグ制御の変数を一個設けて、 if文で制御することになるでしょう。

(2000.12.01)

PerlのTipsへ
参考図書へ
コンピューター言語研究所へ
トップページへ
(C) ©Copyright Noboru HIWAMATA (nulpleno). All rights reserved.