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;