Я не могу поверить, что этот вопрос так же стар, как и у него до сих пор нет технически правильного ответа.
Проблема в том, что вы приказываете своей программе умереть, несмотря ни на что. В конце IO :: Socket :: INET-> new () у вас есть точка с запятой, завершающая этот оператор. Следующее утверждение - die "Error: $?"; который ВСЕГДА умрет. $! просто установлено значение «Незаконный поиск» - вы не создали эту ошибку, и в вашей программе нет ничего другого, это только что $? в данный момент установлено на.
Ничто не вызывает ошибку, кроме того, что вы заменили "или" на ";" после IO :: Select :: INET-> new () (или перед смертью, в зависимости от вашей перспективы). Удалите точку с запятой, добавьте «или», замените «googel.com» на «google.com» и добавьте двойной возврат каретки / перевод строки в конце запроса на http://tools.ietf.org/html/rfc1945 (то есть: print $ сокет "GET / HTTP / 1.0 \ r \ n \ r \ n";) и программа будет работать так, как вы ожидаете.