Perl Net :: OAuth问题

时间:2009-08-20 08:38:32

标签: perl oauth

我正在尝试使用Net::OAuth模块来使用Yammer API进行授权,我有以下代码片段,几乎取自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 个答案:

答案 0 :(得分:4)

$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,
);

感谢Adam Bellaire的评论让我查看了这个。

答案 1 :(得分:2)

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返回哈希参考

my $vars = $q->Vars;
print ref($vars);