eval 1/0 # compile-time error #### my $d= 0; eval 1/$d; #### my $code; my $ok= eval sprintf q{ $code= sub { %s }; 1 }, $string; if(! $ok) { my $err= $@; warn "Compile error on $string: $err"; }; $ok= eval { $code->(); 1; }; if( ! $ok) { my $err= $@; warn "Runtime error on $string: $err"; };