Я не знаком с кодом, но в этой строке в XML :: Stream модуль начинает цикл select (). Строка 523-524 - это место, где передается IO :: Select сокета конечному серверу, а сам IO :: Select передает благословенную ссылку, которая никогда не должна быть неопределенной при использовании XML :: Stream.
Возможно, что-то изменило элемент "SELECT" объекта XML :: Stream в модулях Jabber, возможно, в результате ошибочной попытки исправить ошибку соединения с сервером. Мне жаль, что я не могу быть более конкретным.
В ответ на обновление:
Это странные ошибки, и я все равно хотел заглянуть в модули Jabber, поэтому я взглянул на источник. Нижеследующее основано на рассмотрении последних версий используемых модулей, доступных на CPAN. Это, вероятно, не очень полезно, если вы не хотите начинать создавать подклассы этих модулей и добавлять код, чтобы увидеть, где происходит что-то неожиданное. (Вы можете пропустить следующий абзац, если вас не интересуют внутренние компоненты модулей Jabber.)
Из обновленной информации я проследил ее до точки, где Authen :: SASL :: Perl хрипит в строке 41. Ему нужен результат из механизма $ parent->, и есть две возможные причины, предполагающие Authen: : SASL не сломан. Либо он вызывается неправильно без аргументов из Net :: XMPP :: Protocol (строка 2968), что кажется маловероятным, либо «механизмов», которые он установил в конструкторе для Authen :: SASL, не существует. Net :: XMPP :: Protocol определяет «механизмы» (вызываемый GetStreamFeature, строка 2958; этот метод определен вокруг строки 3340) с return $self->{STREAM}->GetStreamFeature($self->GetStreamID(),$feature);
, где $ feature - это просто строка, передаваемая из вызываемого и id-части XML: : Потоковая сессия объекта.
Исходя из исходной ошибки XML и вероятности сбоя идентификатора сеанса, создается впечатление, что сервер либо отправляет неверные данные в какой-то момент, неожиданный для XML :: Stream, и не учитывается модулями, которые его используют. Я не уверен, что foo%40gmail.com@talk.google.com является правильным форматом имени пользователя, но я не знаю, как это могло вызвать эти ошибки, если сервер Jabber не сделал что-то не так.
Я бы сначала начал с разных имен пользователей на другом сервере и посмотрел, работает ли Jabber :: SimpleSend вообще, а затем попытался как-то захватить выходные данные сервера, чтобы посмотреть, что XML :: Stream захлестывает.
Обновление: Для чего это стоит, я установил модуль, и я получаю точно такие же ошибки. Authen :: SASL :: Perl :: PLAIN и все другие предпосылки существуют. И когда я устанавливаю имя пользователя gmailaccountname@talk.google.com и включаю глобальные предупреждения (например, #! / Usr / bin / perl -w или perl -w filename.pl), XML :: Stream обнаруживает кучу неопределенных проблемы с ценностями, и SimpleSend фактически выдает предупреждение «Не удалось подключиться к серверу Jabber»! (Нет, я не знаю, что это на самом деле означает: ().
Обновление: Я пытался установить Net :: Jabber :: Bot (я отказался после некоторых ошибок модуля ssl), чтобы посмотреть, решит ли он что-нибудь, и я заметил, что его конструктор имеет эту опцию и Примечание:
gtalk => 0 # Default to off, 1 for on. needed now due to gtalk differences from std jabber server.
, что подтверждает идею о том, что сервер делает что-то необычное, для чего XML :: Stream не бросает исключение.