1

我正在尝试使用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 模块本身?

4

2 回答 2

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

感谢亚当贝莱尔的评论让我检查了这一点。

于 2009-08-20T11:12:41.307 回答
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);
于 2009-08-20T09:28:04.453 回答