use warnings; use strict; use Data::Dumper; my @file_list; eval { local $SIG{ALRM} = sub { die "alarm\n" }; alarm 5; chomp( @file_list = `sleep 10; ls /tmp` ); die "ls: \$?=$?" if $?; alarm 0; 1 } or do { die $@ unless $@ eq "alarm\n"; warn "Timed out"; }; print Dumper(\@file_list);