4

warn 4との違いはprint STDERR 4?

perl -e 'local *STDERR; warn 4'

(出力は引き続きSTDERR)

perl -e 'local *STDERR; print STDERR 4'

(ここでは出力しません)

4

3 に答える 3

2

localここでは、型グロブSTDERRがこの時点からローカルであることを示しているだけで、このブロックに入るまでに sig warn デフォルト ハンドラによってすでに認識されている STDERR ハンドルでは何も変更されません。STDERR を本当に黙らせたい場合は、ハンドルを別のものに再度開く必要があります。

ローカルで黙らせてから復元したい場合、低レベルのグロブとハンドルに頼らなければならない場合は、次のようにします。

#!/usr/bin/perl -w
sub f() {
    local *STDERR;
    open STDERR, '>/dev/null';
    warn 4;
}
warn 3;
f();
warn 5;
于 2013-10-21T10:52:15.393 に答える