2013-02-03 95 views
1

'eval'块捕获'死亡'尝试。但在下面的代码中,它未能捕捉到“未初始化值”异常。perl eval没有捕获错误

Perl代码 -

#!/usr/bin/perl 
package poc::template; 

use strict; 
use warnings; 
use Log::Log4perl; 

my $log_conf = "../conf/log4perl.conf"; 
Log::Log4perl::init($log_conf); 
my $logger = Log::Log4perl->get_logger(); 

sub doSome { 
    $logger->info('doing something'); 
    my $add = $ARGV[0] + 4; 
} 

#main 
$logger->info('start'); 
eval { doSome(); }; 
if ([email protected]) { 
    $logger->info('error'); 
} 
$logger->info('stop'); 

这里是日志的conf -

log4perl.rootLogger    = DEBUG, SCREEN 
log4perl.appender.SCREEN   = Log::Log4perl::Appender::Screen 
log4perl.appender.SCREEN.stderr = 0 
log4perl.appender.SCREEN.layout = Log::Log4perl::Layout::PatternLayout 
log4perl.appender.SCREEN.layout.ConversionPattern = %d [%M:%L] %p %F{2} - %m%n 

这里是脚本输出 -

2013/02/03 16:47:02 [main:::18] INFO template\POCTemplate.pl - start 
Use of uninitialized value $ARGV[0] in addition (+) at /POCPerl/template/POCTemplate.pl line 14. 
2013/02/03 16:47:02 [poc::template::doSome:13] INFO template\POCTemplate.pl - doing something 
2013/02/03 16:47:02 [main:::23] INFO template\POCTemplate.pl - stop 

应该不是这个eval块捕获该异常?

+2

你为什么认为这是一个例外? – melpomene

+0

是的,我把这个警告视为例外。我的错。 –

回答

8

不,这是一个警告,不是一个例外。

你可以这样做:

use warnings 'FATAL' => 'all'; 

,使所有的perl生成的警告异常(在一个给定的词法范围)。

+0

对不起,我错过了。 进行了更改。有效。 danke。 –