$in = "20080230100000" ; # error
$mon=substr($in,4,2);
$day=substr($in,6,2);
$mon++;$mon--;
$day++;$day--;
$year = substr($in,0,4);
$hour = substr($in,8,2);
$min = substr($in,10,2);
$sec = substr($in,12,2);
eval
{
use Time::Local;
$dtime = $in;
$unix_dt = timelocal
(substr($dtime,12,2),substr($dtime,10,2),substr($dtime,8,2),substr($dtime,6,2),substr($dtime,4,2)-1,substr($dtime,0,4)-1900) ;
($se,$mi,$ho,$md,$mo,$ye,$wday,$yday,$isdst) = localtime
($unix_dt);
if((($ye+1900) eq $year) && (($mo+1) eq $mon) && ($md eq $day) && ($ho eq $hour) && ($mi eq $min) && ($se eq $sec) )
{
$out = $year . "-" . $mon . "-" . $day . " " . $hour .":" . $min .":" . $sec;
}
};
if($@)
{
return "";
}
eval可以在运行时构造代码并运行,如果运行的代码有致命错误,则eval退出,但是整个程序不会退出。退出后通过判断 $@ 可以知道是否出错