no warnings 'whatever'

404 Blog Not Found:perl - use warnings; # -w でなくて

# 2008年06月20日 mzp mzp *プログラム参考, Perl use warningsで再帰を書くと、毎回警告されるのがうざい。

http://b.hatena.ne.jp/mzp/20080620#bookmark-9012282

id:mzpさんのブクマ米にちょっくら反応。

再帰で警告出るのを回避するには「recursion」をつかえばおk。

no warnings 'recursion';
sub plus {
    my $count = shift || return 0;
    return plus($count-1) + $count;
}

print plus(100);

警告出ないお><

とまあコンナ感じでno warnings 'whatever'使えば解除したい警告だけを対象とすることができるの便利なのだ。

local $^Wの場合は全ての警告が解除されるので自分が意図してないものまで警告解除される危険性があるので使用はオススメしない。

でwhateverにどんなものがあるのかというと、結構多い。色々ある。下記の表をば。

allclosure
deprecated
exiting
glob
ioclosed
exec
layer
newline
pipe
unopened
misc
numeric
once
overflow
pack
portable
recursion
redefine
regexp
severedebugging
inplace
internal
malloc
signal
substr
syntaxambiguous
bareword
digit
parenthesis
precedence
printf
prototype
qw
reserved
semicolon
taint
threads
uninitialized
unpack
untie
utf8
void
y2k

ツリー構造になってます。

「use warnings」と「use warnings 'all'」は等価。

まあいっぱいあるけど実際よく使うのは正直「redefine」くらいのものかと。

ちなみにredefineは関数の再定義した場合に出る警告ね。一時的に関数上書きとか良くあるパターンなので使用頻度は高い。

sub hoge {}

no warnings 'redefine';
*hoge = sub {};

こんなん。

英語ドキュメントは→http://search.cpan.org/perldoc?perllexwarn

若干情報古いけどPerlデバッグ明快技法にもwarningsについての記述もあるのでそちらもオススメ。

Perlデバッグ明快技法

Perlデバッグ明快技法