我似乎无法弄清楚如何打印一些返回值,例如:title
,url
,content
#!/usr/bin/perl
print "Content-type: text/html\n\n";
use REST::Google;
# set service to use
REST::Google->service('http://ajax.googleapis.com/ajax/services/search/web');
# provide a valid http referer
REST::Google->http_referer('http://www.example.com');
my $res = REST::Google->new(
q => 'ice cream',
);
die "response status failure" if $res->responseStatus != 200;
my $data = $res->responseData;
use Data::Dumper;
print Dumper( $data );
my @results = $data->results;
# CANT MAKE THIS WORK
foreach my $r (@result) {
print "\n";
print $r->title;
print $r->url;
print $r->content;
}
答案 0 :(得分:2)
尝试:
foreach my $r (@results) {
注意“s” - 如果你放在脚本的顶部:
use strict;
use warnings;
你会抓住这些东西
答案 1 :(得分:0)
#!/usr/bin/perl
use strict;
print "content-type: text/html\n\n";
use REST::Google;
# set service to use
REST::Google->service(
'http://ajax.googleapis.com/ajax/services/search/web' );
# provide a valid http referer
REST::Google->http_referer( 'http://www.example.com' );
my $res = REST::Google->new( q => 'ice cream', );
die "response status failure" if $res->responseStatus != 200;
my $data = $res->responseData;
my @results = @{ $data->{results} };
foreach my $r ( @results ) {
print "\n";
print $r->{title};
print $r->{url};
print $r->{content};
}
这里有几个问题:
1)$ data不是一个对象,所以你不能把它当成一个对象。
如果您在对象上调用方法,$ data->结果将是正确的语法。在这种情况下,$ data只是一个常规的HASHREF,所以语法是:
$ DATA-> {结果}
2)$ data-> {results}是ARRAYREF而不是ARRAY。因此,您需要取消引用它以获取值。
现在,我的@results = $ data-> {results}变为:
我的@results = @ {$ data-> {results}};
@ {ARRAYREF}是您取消引用数组的方式。
3)当您在@results上进行迭代时,您将再次使用对象语法。但是,@results的值也只是普通的HASHREF。所以,$ r->标题变为:
$ R-> {TITLE}
使用像Data :: Dumper这样的工具来检查返回值可能是排除这类事情的关键。您可能还想查看Data::Printer,它比Data :: Dumper
更性感