ソースコード中のデバッグ文をきれいに取り扱う。
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)
(C) ©Copyright Noboru HIWAMATA (nulpleno). All rights reserved.