I would check the results of your 'open' and 'system' calls and all other such calls. It can be as simple as adding an 'or die' to the end of those lines. This avoid debugging in one area when a simple call is failing.
Consider dropping the global $decide variable and have the subroutine just return true or false. So you could do something like:
if (&Search_Buff){
&Site_Up;
}
else {
&Site_Down;
}
# And below:
if ($line =~ /$search/) {
return 1;
}
else {
return 0;
}
}