2009-08-20 2 views
1

나는 Net::OAuth 모듈을 사용하여 Yammer API로 권한을 부여하려고 노력하고 있으며, CPAN의 개요에서 가져온 다음 코드 스 니펫을 가지고 있습니다.Perl Net :: OAuth 문제

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

내가 명백한 구문 오류를 만들어 본 적이 또는 내가 OAuth를 모듈 자체에보고해야 할 것입니다 : 내 테스트를 시도하고 실행하면 다음과 같이

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

는하지만 오류가 발생합니다? 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 = @_; 

에서

답변

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

감사 아담 벨레 날이이를 확인 만든 코멘트.

+0

나는 처음에 이것을 생각했으나 올바르지 않습니다. ccheneson에 의해 링크 된 소스를 살펴보면 첫 번째 인수 만 해시 참조로 간주되고 나머지는 @_에서 별도의 해시로 가져옵니다. –

+0

게다가 해시 생성자의 요소 수가 홀수입니다.) –

+0

$ q-> Vars가 목록 컨텍스트에서 병합 된 해시를 반환하기 때문에 요소 수가 홀수가 아닙니다. 하지만 이것이 해결책의 핵심이었습니다. 내 편집 된 답변보기 –

2

은 아마 당신은 할 수 있습니다 $ Q-가> 바르가

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