eval { local $SIG{ALRM} = sub { $signal = 'alarm'; die 'alarm'; }; alarm(1); @a = ($input =~ /$regex/xg); alarm(0); }; if ($@ =~ /alarm/ ||$signal eq 'alarm') { $error = "regex match timed out"; print "$error\n"; die; }