事始め
標準出力へログを出力するかしないかのメソッドを定義したのはいいけど、
内部で利用している別の人が作った関数が勝手に print するから完全にログの出力を制御できない。
printのリダイレクト先を変えれば良いわけだけどその場合の手っ取り早い方法について。
実際のコード
tie を利用して一時的に print をリダイレクトします。
test.pl
#/usr/bin/perl
use strict;
use warnings;
# ここから標準出力停止.
my $stopOutput = 1; # フラグが1なら標準出力停止.
{
# 標準出力を停止させる.
my $stopOutput = ($stopOutput==1) ? tie local *STDOUT, 'StopOutput' : (0);
print "aaa\n";
}
# ここまで標準出力停止.
print "bbb\n";
# 標準出力を停止させる為のクラスを定義.
package StopOutput;
sub TIEHANDLE { my $class = shift; my @lines; bless \@lines, $class; }
sub PRINT {}
結果
test.pl
$ perl test.pl
bbb