The problem is that you are not using strict, or rather, you are not Coping With Scoping. You actually have two variables $size - one, the global $size which you set to 0 at the top of your program, and another, $size, which you declare in the loop and set it to the length of your data. You should do away with the inner my and the script should work:
use strict;
use LWP::Simple;
my $size;
my $data2;
while (! length $data2) {
$data2 = LWP::Simple::get($site);
if (! length $data2) {
warn "Couldn't get a response from '$site', sleeping";
sleep 5; # give the website some time
}:
};
...