2016-05-05 34 views
2

私はREST API応答ヘッダーから 'Auth-Token'の値を取得しようと数時間を費やしましたが、bless({key => value})の意味を理解できません これは配列内のハッシュリファレンスですか?どのようにループすることができますか?Perlがネストされたハッシュの値を取得する

$VAR1 = bless({ 
        'access-control-allow-credentials' => 'true', 
        'connection' => 'keep-alive', 
        'x-powered-by' => 'restheart.org', 
        'client-response-num' => 1, 
        'access-control-allow-origin' => '*', 
        'date' => 'Thu, 05 May 2016 22:54:44 GMT', 
        'client-peer' => '172.18.18.122:8080', 
        'content-length' => '469', 
        'access-control-expose-headers' => 'Location, ETag, Auth-Token, Auth-Token-Valid-Until, Auth-Token-Location, X-Powered-By', 
        '::std_case' => { 
             'access-control-allow-credentials' => 'Access-Control-Allow-Credentials', 
             'x-powered-by' => 'X-Powered-By', 
             'client-response-num' => 'Client-Response-Num', 
             'access-control-allow-origin' => 'Access-Control-Allow-Origin', 
             'client-peer' => 'Client-Peer', 
             'access-control-expose-headers' => 'Access-Control-Expose-Headers', 
             'client-date' => 'Client-Date', 
             'auth-token-valid-until' => 'Auth-Token-Valid-Until', 
             'auth-token-location' => 'Auth-Token-Location', 
             'auth-token' => 'Auth-Token' 
            }, 
        'client-date' => 'Thu, 05 May 2016 22:55:00 GMT', 
        'content-type' => 'application/hal+json', 
        'auth-token-valid-until' => '2016-05-05T23:09:44.471Z', 
        'auth-token-location' => '/_authtokens/test', 
        'auth-token' => 'fbbb0215-cedd-4a10-9f89-93fdf1e84fdc' 
        }, 'HTTP::Headers'); 
+1

'$ VAR1 - > {'auth-token'}' –

答えて

4

これはHTTP::Headersオブジェクトに祝福されたハッシュです。あなたはそのAPIを使って、必要なものにアクセスできます。

my $token = $VAR1->header('auth-token'); 

私が今までにHTTP::Headers変化の内部場合には、(カプセル化を壊す)直接ハッシュ経由でアクセスすることをお勧めしません。

0

perl5でオブジェクトのハッシュを使用するのが一般的です。この場合、$ VAR1に 'HTTP :: Headers'オブジェクトがあります。フードの下では、オブジェクトは祝福されたHashRefです。したがって、あなたが見ているのは、ハッシュの普通の「勇気」です。 "fat commas"の左側にはキーがあり、右側には値があります。

あなたの質問は、変数にハッシュリファレンスがあると、キー 'x'の値はどのように取得できますか?さて、ここであなたがそれを行う方法です - しかし、それはしません。

print $VAR1->{ auth-token }; 

私が「しない」と言う理由は、カプセル化と呼ばれるOOプログラミングの基本原則を破っているということです。オブジェクトの詳細は、あなたのビジネスのいずれにもなりません。代わりにクラスによって提供されるメソッドを使用してください(つまり、モジュールHTTP::Headersによって提供されます)

HTTP::Heders docoを読むと、あなたは 'auth token'のようにヘッダを取得できます。

print $VAR1->header('auth-token') 

これはあなたがする必要があります。

+0

「オブジェクトにハッシュを使用する」とはわかりません。基本的に、ネストされたハッシュは参照の連鎖であり、オブジェクトも同様です。だから、彼らは基本的に同じことです、それはオブジェクトがクラスから取得するメソッドを持っているだけです。 – Sobrique

関連する問題