ハッシュ参照から情報を抽出するには、まず逆参照する必要があります。次のいずれかを実行できます。
print ${$artifact}{uri},"\n";
この特定のケースでは、中かっこを省略して、次のようにすることができます。
print $$artifact{uri},"\n";
ただし、あいまいになる可能性があるため、表記のスタイルが逆参照に対して常に機能するとは限らないことに注意してください。
または、より新しく、おそらくより明確な表記 (たとえば、オブジェクト指向など)
print $artifact->{uri},"\n";
ただし、ここには大きな警告ベルがありbless
ます。これは、おそらくオブジェクトを操作していることを意味します。オブジェクトの内部を突くのは非常に汚いです。あなたはそれをするべきではありません。通常、オブジェクトには、必要な情報を提供するアクセサ メソッドが含まれます。慣例により、_
接頭辞は、private
たとえば「これを台無しにしないでください」を示します。(とにかくそうすべきではない)
コメントにあるように、これはオブジェクトに埋め込まれた JSON テキスト文字列です。したがって、本当にこれを行うことに決めた場合は、JSON を解析して、それを perl データ構造に変換し、それを使用できます。
しかし、操作しているオブジェクトにはいくつかのアクセサ メソッドが組み込まれている可能性が高く、それらを使用する必要があります。
上記の例を考えると:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use JSON;
my $hashref = {
_content => '{
"results" : [ {
"uri" : "http://localhost:port/myfile.tar"
} ]
}'
};
print Dumper \$hashref;
my $json = JSON->new();
my $json_ob = $json->decode( $hashref->{_content} );
print Dumper \$json_ob;
print $json_ob ->{results}->[0]->{uri};
ただし、コメントで述べたように、使用している:
Artifactory::Client
は非常に賢明に使用していますLWP
。
このモジュールで提供されるすべてのパブリック メソッドは、HTTP::Response オブジェクトを返します。
ドキュメントを参照すると、次のHTTP::Response
サンプルが得られます。
if ($artifact->is_success) {
print $artifact->decoded_content;
}
else {
print STDERR $artifact->status_line, "\n";
}