... my $IE; my $IETimeout = 60; my $timeAtStart; #new global var ... sub IENavigate( $ ) { my $url = shift; my $seconds = 0; $timeAtStart = time unless ($timeAtStart); print "IENavigate $url\n"; alarm $IETimeout; $IE->navigate($url); Win32::OLE->MessageLoop(); print "Finished Blocking\n"; return; } sub IEEvent(){ my ($Obj,$Event,@Args) = @_; if (($IETimeout) && ($timeAtStart) && (time > ($timeAtStart + $IETimeout) )) {&IEAlarm(17)}; print "IEEvent '$Event' @ " . time . qq|\n|; }