Perl Net :: OAuth проблема - PullRequest
       7

Perl Net :: OAuth проблема

1 голос
/ 20 августа 2009

Я пытаюсь использовать модуль Net :: OAuth для авторизации с помощью API Yammer, и у меня есть следующий фрагмент кода, в значительной степени взятый из Синопсиса на CPAN.

$Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A;
my $q = new CGI;

my $request = Net::OAuth->request("request token")->from_hash($q->Vars,
                request_url => $self->_request_token_url,
                request_method => $q->request_method,
                consumer_secret => $self->consumer_private,
            );

Но если я попытаюсь запустить мой тест, он выдаст ошибку следующим образом:

Expected a hash! at /Library/Perl/5.8.8/Net/OAuth/Message.pm line 241.

Я допустил явную синтаксическую ошибку или мне придется посмотреть на сам модуль OAuth?

Ответы [ 2 ]

4 голосов
/ 20 августа 2009

$q->Vars возвращает ссылку на хэш в скалярном контексте и плоский хэш в контексте списка. Аргументы подпрограммы создают контекст списка. Поэтому вы должны сделать:

my $request = Net::OAuth->request("request token")->from_hash(
      scalar $q->Vars,
      request_url => $self->_request_token_url,
      request_method => $q->request_method,
      consumer_secret => $self->consumer_private,
);

Спасибо Адаму Беллэру за комментарий, который заставил меня проверить это.

2 голосов
/ 20 августа 2009

В Net :: OAuth :: Message

sub from_hash {
    my $proto = shift;
    my $class = ref $proto || $proto;
    my $hash = shift;
    if (ref $hash ne 'HASH') {
        die 'Expected a hash!';
    }
    my %api_params = @_;

Может быть, вы можете убедиться, что $ q-> Vars возвращает хэш ref

my $vars = $q->Vars;
print ref($vars);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...