warn 4との違いはprint STDERR 4?
perl -e 'local *STDERR; warn 4'
(出力は引き続きSTDERR)
perl -e 'local *STDERR; print STDERR 4'
(ここでは出力しません)
warn 4との違いはprint STDERR 4?
perl -e 'local *STDERR; warn 4'
(出力は引き続きSTDERR)
perl -e 'local *STDERR; print STDERR 4'
(ここでは出力しません)
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;