CheckTree错误重定向问题

CheckTree错误重定向问题

use File::CheckTree;
open(LOGFILE,">logfile");

$warnings = validate(q{
        /etc/master.passwd -f
        /etc/hosts -d
        /etc/fsdfa -r
});
$SIG{__WARN__} = {print LOGFILE "@_"};
close(LOGFILE);

错误并没有重定向到文件,而是直接输出了。如何实现?


QUOTE:
原帖由 FinalBSD 于 2007-11-1 14:33 发表
use File::CheckTree;
open(LOGFILE,">logfile");

$warnings = validate(q{
        /etc/master.passwd -f
        /etc/hosts -d
        /etc/fsdfa -r
});
$SIG{__WARN__} = {print LOGFILE "@_"} ...

有两点:
1、validate()里面已经对$SIG{__WARN__}进行了重新定义.所以你在后面再定义$SIG{__WARN__}对validate()方法不起作用.
2、我猜你是想调用你一个匿名函数来实现对WARN信号的重定义吧.应该这样写
$SIG{__WARN__} = sub{print LOGFILE "@_"};


所以总体来说你的代码应该是这样的:
use File::CheckTree;
open(LOGFILE,">logfile");

$SIG{__WARN__} = sub{print LOGFILE "@_"};

$warnings = validate(q{
        /etc/master.passwd -f
        /etc/hosts -d
        /etc/fsdfa -r
});

close(LOGFILE);


QUOTE:
原帖由 gsging 于 2007-11-1 19:28 发表


有两点:
1、validate()里面已经对$SIG{__WARN__}进行了重新定义.所以你在后面再定义$SIG{__WARN__}对validate()方法不起作用.
2、我猜你是想调用你一个匿名函数来实现对WARN信号的重定义吧.应该这样写
$ ...

可以了,谢谢哈,出现问题主要是因为:
1.开始使用了sub,但是没把WARN放validate之前
2.把WARN放validate之前却没有使用sub。
谢谢