要从哈希引用中提取信息,首先需要取消引用。您可以:
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";
}