2016-08-12 63 views
1
use strict; 
use warnings; 
use Date::Parse; 
use Try::Tiny; 

my $etime = time; 
my $stime = ""; 
try{ 
    my $dur = $etime - str2time($stime); 
} catch { 
    print "error: $!\n"; 
}; 

输出的Perl:尝试::微小赶上

Use of uninitialized value in subtraction (-) at perl_try.pl line 10. 

任何人都知道怎么抓呢?
这是不是被捕获块

+1

这是不是一个错误;这只是一个警告。 – melpomene

+0

你怎么接到警告。禁用它打印到标准输出(最好不要删除“使用警告”)即时猜测 – ealeon

+1

如果Try :: Tiny确实收到错误,那么它将在'$ _'中,而不是'$!'。此外,警告转到标准错误,而不是标准输出。 – melpomene

回答

5

Try :: Tiny在这里没有做任何事情,因为该消息只是一个警告,而不是一个例外。

perldoc Date::Parse

str2time解析DATE并返回一个UNIX时间值,或在故障时为undef。

所以,如果你想在str2time处理一个语法错误,你可以简单地检查undef

my $parsed_time = str2time($stime); 
if (!defined $parsed_time) { 
    # ... handle this case 
} else { 
    my $dur = $etime - $parsed_time; 
    ... 
} 
+0

是的,只是这样做 – ealeon