system関数を大量に使うスクリプトのデバッグ
system関数を大量に使うスクリプトを書いたとき、ディレクトリを消すというような
処理がある場合に、実行するのが怖い。コメントアウトして、実行するコマンドを
表示するというのも面倒。なんで環境変数により, system関数を一時的に置き換える
ようにしてみた。本当に怖い場合は、明示的に指定した場合にのみ実行、そうでない
場合は表示のみにする方が良いかもしれません。
コード
#!perl use strict; use warnings; BEGIN { if ($ENV{DEBUG}) { no warnings 'redefine', 'once'; my $count = 0; *CORE::GLOBAL::system = sub { print "[$count] ", "@_", "\n"; $count++; }; } }; system "du", "-s", "-h"; system "printf", "Today is "; system "date"; system "cal", "12", "2011"; system "printf", q['%d = %x(in hex)\n'], '255', '255';
実行
% DEBUG=1 perl debug_system.pl [0] du -s -h [1] printf Today is [2] date [3] cal 12 2011 [4] printf '%d = %x(in hex)\n' 255 255
おわりに
system関数を呼ぶのをどこか一箇所にして、そこだけで
対応という方が綺麗かもしれませんが、なんとなく書いたコード
だとついこんな感じになってしまったので、こうしてみました。
普通に書くなら、局所化すべきでしょう。