Вам не хватает последней точки с запятой в блоках try / catch.
У вас есть:
try {
...
}
catch {
...
}
return;
Итак, у вас есть код, который эквивалентен: try( CODEREF, catch( CODEREF, return ) );
Обновление:
Я забыл упомянуть, чтобы исправить ваш код, просто измените shell_command_2
:
sub shell_command_2 {
my $command = shift;
my $timeout_alarm = shift;
my @array;
try {
local $SIG{ALRM} = sub { die "timeout '$command'\n" };
alarm $timeout_alarm;
@array = qx( $command );
alarm 0;
}
catch {
die $_ if $_ ne "timeout '$command'\n";
warn $_ if $_ eq "timeout '$command'\n";
}; # <----- Added ; here <======= <======= <======= <=======
return @array;
}