実行時に、デバッグメッセージの表示/非表示を切り替える w/ Smart::Comments

DRYではない気がするけど、実行するスクリプトやモジュールにいちいち、

BEGIN {
    if ($ENV{SMART_COMMENTS}) {
        use UNIVERSAL::require;
        Smart::Comments->use;
    }
}

もしくは

BEGIN {
    if ($ENV{SMART_COMMENTS}) {
        my @p = map { '#'x$_ } ($ENV{SMART_COMMENTS} =~ /([345])\s*/g);
        use UNIVERSAL::require;
        Smart::Comments->use(@p);
    }
}

と書いておくのはどうだろう?

後者だと、デバッグメッセージ表示したいときは

$ env SMART_COMMENTS=t hoge.pl

とか

$ env SMART_COMMENTS='4 5' hoge.pl

とかすればおk。


むぅ。

package P;

use strict;
use warnings;

sub enable {
    return <<'END_ENABLE';
my $debug_flag = $ENV{SMART_COMMENTS} || $ENV{SMART_COMMENT} || $ENV{SMART_DEBUG} || $ENV{SC};                                                                 
if ($debug_flag) {                                                              
    my @p = map { '#'x$_ } ($debug_flag =~ /([345])\s*/g);                      
    use UNIVERSAL::require;                                                     
    Smart::Comments->use(@p);                                                   
}
END_ENABLE
}

1;
__END__

で、

use UNIVERSAL::require;
BEGIN { P->use && eval &P::enable; }

の方がちびっとましか?