ソースコード中のデバッグ文をきれいに取り扱う。
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.