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