Я думаю, вы неправильно читаете документацию для модуля .Из приведенного здесь синопсиса пример, который больше всего похож на ваш, является первым:
my $client = REST::Client->new();
$client->GET('http://example.com/dir/file.xml');
print $client->responseContent();
Обратите внимание, в частности, на то, что этот пример ничего не делает с возвращаемым значением из GET()
.В вашем примере вы делаете эквивалент этого:
my $client = REST::Client->new();
my $resp = $client->GET('http://example.com/dir/file.xml');
print $resp->responseContent();
Как это происходит, хотя нет задокументированного возвращаемого значения из GET()
[ Обновление: Я ошибся здесь - см.первый комментарий - но возвращаемое значение действительно предназначено только для цепочки вызовов методов], оно фактически возвращает объект, который был передан, поэтому ваш подход должен работать.Но, как правило, плохая идея - не следовать документации.
Так что же на самом деле идет не так?Ну, я не уверен.Как я уже сказал, ваш подход должен (случайно) работать.Но сообщение об ошибке, которое вы получаете, говорит нам, что вы передаете decode_json()
объект REST :: Client, а не строку, содержащую JSON.Я не думаю, что так должен работать ваш код.Возможно, код, который вы нам показали, на самом деле не тот код, который вы запускаете.
Лучший способ отладить это - следовать совету Квентина в первом комментарии к вашему вопросу - выведите значение, котороевы пытаетесь перейти к decode_json()
перед передачей функции.На самом деле, это хороший общий совет по программированию - сначала пишите свой код шаг за шагом, и объединяйте шаги только тогда, когда вы знаете, что отдельные шаги работают правильно.
Используя имена переменных, я думаю, что ваш код должен выглядетьнапример:
my $client = REST::Client->new();
# ...other code...
$client->GET($serverurl."serverinfo", $headers);
print $client->responseContent();
# And, only once you've established that
# $client->responseContent() returns what
# you expect, you can add this:
$idartinstance = decode_json($client->responseContent());
Если оператор print()
не показывает JSON, тогда обновите свой вопрос , чтобы добавить все, что напечатано, и мы еще посмотрим.